【发布时间】:2017-03-02 16:57:23
【问题描述】:
在我的 ASP .NET Web 项目上显示 Crystal Report 时遇到问题。这是我的“查看报告”按钮代码:
private void ViewReport(int bankID, DateTime dateFrom, DateTime dateTo)
{
ReportDocument report = new ReportDocument();
report.Load(Server.MapPath("~\\Reports\\rptBankTransactionsList.rpt"));
report.SetDataSource(bankEntities.spBankTransactionsList(bankID, dateFrom, dateTo).ToList());
report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "TransactionsList");
}
我正在使用实体框架,并且 spBankTransactionsList 存储过程正在返回正确的值。我什至使用完全相同的存储过程在 GridView 中毫无问题地显示结果。该报告使用的 DataSet 与存储过程的结果值完全相同。
这是存储过程:
ALTER PROCEDURE [dbo].[spBankTransactionsList]
@bankID AS INT,
@dateFrom AS DATETIME2,
@dateTo AS DATETIME2
AS
BEGIN
SELECT B.BankID, B.BankName, BT.Date, BT.Description, BT.Amount
FROM Bank B
INNER JOIN BankTransaction BT ON B.BankID = BT.BankID
WHERE B.BankID = @bankID
AND BT.Date BETWEEN @dateFrom AND @dateTo
END
我有几个相同情况的报告,这是唯一一个在加载报告时向我返回“DataSet 不支持 System.Nullable”错误的报告。存储过程结果不显示任何空值,正如我所说,GridView 中的结果是可以的。
如果存储过程结果的行数为零,则报告加载正常,显然没有记录但它加载了!我错过了什么?
提前感谢。
【问题讨论】:
-
不知何故它与日期列有关。只是为了测试,我从 SP 中删除了该列并应用实体框架中的更改。因此,它很好地显示了报告。然后我再次添加了日期列,现在它可以工作了!我不知道为什么会这样,但至少它现在有效。
-
可能你在字段中的日期日期为空值。
-
不,日期字段设置为“not null”,这就是为什么我无法理解这里发生了什么
标签: c# asp.net entity-framework stored-procedures crystal-reports