0

我在我的ASP .NET Web項目中顯示Crystal Report時出現問題。這是我的「查看報告」按鈕代碼:Crystal Reports返回「DataSet不支持System.Nullable」與存儲過程

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 

我有同樣的情況幾份報告,這是我回國的「數據集不支持System.Nullable」錯誤加載報告時,只有一個。存儲過程結果不顯示任何空值,正如我所說的,GridView中的結果是正確的。

如果存儲過程結果的行爲零,則報告加載正常,顯然沒有記錄但會加載!我錯過了什麼?

感謝advace。

+0

不知怎的,它具有與日期列做。只是爲了測試我從SP刪除列,並將在實體框架的變化。因此, ,它顯示的報告很好,然後我又添加了日期列,現在它的工作原理!我不知道爲什麼會發生這種情況,但至少現在它可以正常工作 –

+0

也許你的日期日期在字段中有一個空的v ALUE。 –

+0

不,日期字段設置爲「不爲空」,這就是爲什麼我不明白這裏發生了什麼 –

回答

0

這個問題一直存在於其他報告和SP中,所以最後我提出瞭解決方案。

儘管在我的SP中,我確保在結果中不存在空值,但是在實體框架將SP帶入模型時,它會「假定」某些列可能爲空。

解決方案是爲模型資源管理器選擇實體模型,然後在複雜類型中搜索SP的結果類型(在我的例子中是「spBankTransactionsList_Results」,展開它並檢查每個屬性都有可爲空的值爲false。

希望這hepls別人有同樣的問題。