Store and retrieve Crystal Report (.rpt) file from database in ASP.Net

Last Reply 29 days ago By dharmendr

Posted one month ago

Hello dear

i want to store my crystal report file in database and preview crystal report by opening .rpt file from sql database.

Thanks 

 

Posted 29 days ago

Hi arehman,

Refering the below link i have added code for saveing .rpt file in database and retrieve rpt from database and display in page.

Display data in Crystal Report with Grid (Tabular) structure using C# in ASP.Net

For saving and retrieving files in database refer below article.

Save and Retrieve Files from SQL Server Database using ASP.Net

HTML

<asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="SaveReportFile" />
<asp:Button ID="btnRetrieve" runat="server" Text="Display" OnClick="DisplayReportFile" />
<br />
<CR:CrystalReportViewer ID="crPersonInformation" runat="server" AutoDataBind="true"
    EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False" ToolPanelView="None" DisplayGroupTree="False" />

Namespaces

using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
using System.IO;

Code

private PersonInformation GetPersonInformations(string searchTerm)
{
    string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    SqlCommand cmd = new SqlCommand("GetPersonInformation");
    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@SearchTerm", searchTerm);
            sda.SelectCommand = cmd;
            using (PersonInformation dsPersonInformations = new PersonInformation())
            {
                sda.Fill(dsPersonInformations, "PersonInformation");
                return dsPersonInformations;
            }
        }
    }
}

protected void SaveReportFile(object sender, EventArgs e)
{
    string reportPath = Server.MapPath("~/PersonInformationReport.rpt");
    byte[] bytes = File.ReadAllBytes(reportPath);
    string constr = ConfigurationManager.ConnectionStrings["constr1"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(constr))
    {
        string sql = "INSERT INTO tblFiles VALUES(@Name, @ContentType, @Data)";
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.AddWithValue("@Name", Path.GetFileName(reportPath));
            cmd.Parameters.AddWithValue("@ContentType", "application/octet-stream");
            cmd.Parameters.AddWithValue("@Data", bytes);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
}

protected void DisplayReportFile(object sender, EventArgs e)
{
    byte[] bytes = null;
    string fileName = "";
    string constr = ConfigurationManager.ConnectionStrings["constr1"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(constr))
    {
        string sql = "SELECT * FROM tblFiles WHERE id = 7";
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            conn.Open();
            SqlDataReader sdr = cmd.ExecuteReader();
            if (sdr.Read())
            {
                bytes = (byte[])sdr["Data"];
                fileName = sdr["Name"].ToString();
            }
            conn.Close();
        }
    }

    string reportSavePath = Server.MapPath("~/Files/" + fileName);
    File.WriteAllBytes(reportSavePath, bytes);

    string searchTerm = txtSearch.Text.Trim();
    ReportDocument crystalReport = new ReportDocument();
    crystalReport.Load(Server.MapPath("~/PersonInformationReport.rpt"));
    PersonInformation dsPersonInformations = GetPersonInformations(searchTerm);
    crystalReport.SetDataSource(dsPersonInformations);
    crPersonInformation.ReportSource = crystalReport;
}

Screenshot