2011-12-06 13 views
2

私は過去数時間のGoogle検索を行っていますが、それらの質問は私のケースには適用できません。 私はDateTimePickerから日付を選ぶことができるレポートアプリケーションを持っていて、最も大きな量の値を持つアイテムが表示されます。レポートビューアコントロールを使用して情報を表示します。ここでC#文字列から日付や時刻を変換したときに変換に失敗しました

は、私のテーブルアダプタでのSQLクエリです:

SELECT TOP (1) 
    Drink_Name, 
    SUM(Quantity) AS NoDrink, 
    Bill_No, 
    Staff_No, 
    Bill_Date, 
    Bill_Value, 
    Customer_No, 
    Unit_Price, 
    Quantity 
FROM    

    (SELECT   
     Bill.Bill_No, 
     Bill.Staff_No, 
     Bill.Bill_Date, 
     Bill.Bill_Value, 
     Bill.Customer_No, 
     Bill_Detail.Drink_Name, 
     Bill_Detail.Bill_No AS Expr1, 
     Bill_Detail.Unit_Price, 
     Bill_Detail.Quantity 
    FROM 
     Bill INNER JOIN 
     Bill_Detail ON Bill.Bill_No = Bill_Detail.Bill_No 
    WHERE   
     (Bill.Bill_Date = @Bill_Date) 
    ) AS Temp 
    GROUP BY Drink_Name, 
     Bill_No, 
     Staff_No, 
     Bill_Date, 
     Bill_Value, 
     Customer_No, 
     Unit_Price, 
     Quantity 
ORDER BY NoDrink DESC 

そして、ここで生成し、負荷データのコードがレポートデータセットの中にある

CoffeeShopDataSetTableAdapters.DataTable1TableAdapter adapter = 
    new CoffeeShopDataSetTableAdapters.DataTable1TableAdapter(); 
CoffeeShopDataSet.DataTable1DataTable table = 
    new CoffeeShopDataSet.DataTable1DataTable(); 
adapter.FillByMax(table, dateTimePicker1.Value.ToShortDateString()); 
ReportDataSource maxdatasource = 
    new ReportDataSource("DataSet1form3", (DataTable)table); 

this.reportViewer1.LocalReport.DataSources.Clear(); 
this.reportViewer1.LocalReport.DataSources.Add(maxdatasource); 
this.reportViewer1.LocalReport.Refresh(); 
this.reportViewer1.RefreshReport(); 

問題は、私はいつもこのエラーを取得することです:

"System.Data.dllで 'System.Data.SqlClient.SqlException'型の未処理例外が発生しました

追加情報:文字列から日付および/または時刻を変換するときに変換に失敗しました。

私はSQLサーバ管理2008でSQLクエリを試してみるとうまくいきますので、これはVSの問題だと思います。 ありがとうございました。 悪いが残念です。

+0

であると仮定すると変更by DateTimePicker1.Value.ToShortDateString() –

+0

'Bill.Bill_Date'はデータベース内の有効な日時フィールドですか、それとも文字型フィールドですか(varchar、varcharなど)?null値を含むことができますか? – David

+0

なぜあなたは渡していますかDateTimeではなく文字列? –

答えて

0

日時の書式が混乱することはありません。

1)明示的な書式

dateTimePicker1.Value.ToString("yyyyMMdd"); 

2で日付を文字列に変換するライン)(SQLを変更Bill.Bill_Date列が返された値が何日

(Bill.Bill_Date = CONVERT(DATE, @Bill_Date, 112) 
+0

私はそのままSQLを残して、実際のDateTime値 'dateTimePicker1.Value'をパラメータとして渡します。 –

+0

はい、これは理想的ですが、CoffeeShopDataSetTableAdapters.DataTable1TableAdapterコードは使用できません。そのため、データ型が@Bill_DateのSQLParameterとして使用されていて、FillByMaxメソッドのパラメータは2番目のパラメータが文字列型なので変更する必要があります。 – Simon

+0

@Simonこの提案を試してみて、それがどのように機能するかお知らせください。 – sfuqua

関連する問題