MVC 4报告与实体框架

本文关键字:实体 框架 报告 MVC | 更新日期: 2023-09-27 18:08:06

我正在使用MVC4和实体框架,以开发一个内部网web应用程序,我必须创建可以由用户下载的报告。事实上,我有2个报告模板。rdlc文件)。其中一个是通用模板,它将被复制和修改以用于下一个模板。这就是我对"PersonReport"模板所做的:从通用模板复制和修改。

我的问题是,使用泛型模板(和下面的代码),一切都很好。但是,当我使用我的个性化模板时,它不起作用。我试图调试我的代码,我发现问题在哪里(当我使用。render()来指定格式时)。这是我的错误信息:
An error occurred during local report processing.

下面是我的动作:

public ActionResult PersonReport()
{
    ReportViewer personReportViewer = new ReportViewer();
    //Parameters
    ReportParameter[] reportParameters = new ReportParameter[3];
    reportParameters[0] = new ReportParameter("Title", "Test", true);
    reportParameters[1] = new ReportParameter("Address", "Avenue de Tervuren,  268", true);
    reportParameters[2] = new ReportParameter("PostalCode", "B-1150 Brussels", true);
    //Report Template
    personReportViewer.ProcessingMode = ProcessingMode.Local;
    personReportViewer.LocalReport.ReportPath = HttpContext.Server.MapPath("..") + "''Reporting''Templates''" + "AllPersonsReport.rdlc";
    //Source
    DataSet ds = BuSIMaterial.Utils.Services.ExecuteStoredProcedure(db, "GetAllPersons", null);
    ReportDataSource dataSource = new ReportDataSource("personDataSource", ds.Tables[0]);
    personReportViewer.LocalReport.DataSources.Clear();
    personReportViewer.LocalReport.DataSources.Add(dataSource);
    //Report type
    personReportViewer.LocalReport.SetParameters(reportParameters);
    byte[] byteArray = personReportViewer.LocalReport.Render("PDF"); //Here's the failure
    //Downloading
    Response.ClearHeaders();
    Response.AddHeader("Content-Disposition", "attachment; Filename='"" + DateTime.Now + "_Title_.pdf" + "'"");
    Response.AddHeader("Content-Transfer-Encoding", "Binary");
    Response.BinaryWrite((byte[])byteArray);
    Response.Flush();
    Response.End();
    return RedirectToAction("Index");
}

和我的方法来创建一个数据集从一个简单的选择*存储过程:

public static DataSet ExecuteStoredProcedure(ObjectContext db,
                                     string storedProcedureName,
                                     IEnumerable<SqlParameter> parameters)
{
    var connectionString =
        ((EntityConnection)db.Connection).StoreConnection.ConnectionString;
    var ds = new DataSet();
    using (var conn = new SqlConnection(connectionString))
    {
        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = storedProcedureName;
            cmd.CommandType = CommandType.StoredProcedure;
            if (parameters != null)
            {
                foreach (var parameter in parameters)
                {
                    cmd.Parameters.Add(parameter);
                }
            }
            using (var adapter = new SqlDataAdapter(cmd))
            {
                adapter.Fill(ds);
            }
        }
    }
    return ds;
}

UPDATE:我想检查我的数据集是否被填充,它不是。这是问题所在吗?

MVC 4报告与实体框架

我认为你应该尝试添加更多的参数到你的Render()重载:

    private Warning[] warnings;
    private string[] streams;
    private string mimeType;
    private string encoding;
    private string extension;
    byte[] byteArray = personReportViewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streams, out warnings);