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"); 
} 

私はEntity Frameworkのを使っていて、spBankTransactionsListストアドプロシージャが正しい値を返しています。私はまったく同じストアドプロシージャを使用してGridViewに結果を問題なく表示しています。レポートでは、ストアドプロシージャの結果値とまったく同じデータセットを使用しています。

これはストアドプロシージャです:私は同じ状況にいくつかの報告があり、これは、レポートをロードするときにエラー「DataSetが可能System.Nullableをサポートしていない」私を返しているだけです

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 

。私が言ったように、ストアドプロシージャの結果はnull値を表示していないので、GridViewの結果はOKです。

ストアドプロシージャの結果の行がゼロの場合、レポートは正常にロードされますが、明らかにレコードはなくロードされます。私は何が欠けていますか?

ありがとうございました。

+0

どういうわけか、それは私がSPからその列を削除し、Entity Frameworkの中に変更を適用するだけでテストのために。日付列に関係しています。だから、それでは、レポートをうまく表示しました。そして、私は再び日付の列を追加しました。今は動作します!なぜこれが起こったのか分かりませんが、少なくとも今のところうまくいきます。 –

+0

おそらく、アウエー。 –

+0

いいえ、日付フィールドが "not null"に設定されているため、ここで何が起こったのか分かりません –

答えて

0

問題は他のレポートやSPに引き続き残っていましたので、ついに解決策を思いつきました。

私のSPでは、結果にヌル値がないことを確認していますが、何とかして、Entity FrameworkがモデルにSPを取得すると、一部の列がNULL可能であると "仮定"しています。

解決策は、モデルエクスプローラでエンティティモデルを選択し、次に複合タイプでSPの結果タイプを検索します(私の場合は「spBankTransactionsList_Results」でした)、すべてのプロパティにnull値があることを確認しますfalseに。

希望は、これは同じ問題で他の誰かをhepls。

関連する問題