2011-12-06 65 views
2

我在過去的幾個小時內搜索了一下,這些問題都不適用於我的案例,所以希望大家可以提供幫助。 我有一個報告應用程序,用戶可以從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 Server管理2008年SQL查詢,它工作得很好,所以我認爲這是VS問題。 感謝所有提前。 對不起,對不起英文

+0

什麼是返回的值通過dateTimePicker1.Value.ToShortDateString() –

+0

是'Bill.Bill_Date'數據庫中的有效日期時間字段,或者它是一個字符類型字段(varchar,varchar等)?它可以包含空值嗎? – 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方法參數將需要更改,因爲第二個參數現在是字符串類型。 – Simon

+0

@Simon請試試這個建議,讓我們知道它是如何工作的。 – sfuqua

相關問題