2011-12-06 2 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.SqlClient.SqlException'형식의 예외가 System.Data.dll에서 발생했습니다.

추가 정보 : 문자열에서 날짜 및/또는 시간을 변환하지 못했습니다. "

SQL 서버 관리 2008 SQL 쿼리를 시도 할 때 잘 작동합니다, 그래서이 VS 문제를 생각합니다. 미리 감사드립니다. 나쁜 영어로 죄송합니다

+0

이라고 가정 변경 by DateTimePicker1.Value.ToShortDateString() –

+0

'Bill.Bill_Date'는 데이터베이스의 유효한 datetime 필드입니까, 아니면 문자 유형 필드 (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 메소드 매개 변수를 변경해야합니다 . – Simon

+0

@Simon이 제안을 시도해보고 그것이 어떻게 작동하는지 알려주십시오. – sfuqua

관련 문제