2011-12-14 1 views
0

두 날짜 사이에 Tr_cashbook 테이블에서 일부 레코드를 선택해야합니다. 날짜 필드는 내가 데이터를 비교해야 레코드가 rptCash2라는 크리스탈 보고서에 표시되어야합니다 newdt입니다. newdt 필드에는 datetime 속성이 있습니다. 여기에 명령 단추vb.net에서 두 날짜 사이의 레코드를 선택하면 오류 피연산자 유형이 충돌합니다.

bdcon.Open() 

    Dim QueryString As String 
       QueryString = "Select * from Tr_Cashbook where (Cast(newdt as date)>= " & DateTimePicker1.Value.ToString("yyyy-MM-dd") & ") and (Cast(newdt as date) <= " & DateTimePicker2.Value.ToString("yyyy-MM-dd") & ")" 

    Dim Adapter As SqlDataAdapter = New SqlDataAdapter(QueryString, bdcon) 
    Dim ds As DataSet = New DataSet() 
    Adapter.Fill(ds, "Tr_Cashbook") 

    rptCash2.Load() 
    rptCash2.SetDataSource(ds) 
    CrystalReportViewer1.ReportSource = rptCash2 

    bdcon.Close() 

의 코드는하지만 난이 피연산자 유형 충돌과 같은 오류를 제공 명령 단추를 누르면이 를 작동하지 않습니다 : 날짜 INT와 호환되지 않습니다. 나는 내가 어디로 잘못되었는지 알 수 없다. 이걸 도와주세요.

답변

1

하드 코딩 된 SQL 문자열 대신 parameters을 사용하십시오.

귀하의 매개 변수가있는 쿼리가있을 갈까요 :

QueryString = "Select * from Tr_Cashbook where newdt>[email protected] and 
    newdt<= @date2" 

Dim Cmd as new SqlCommand(QueryString,bdcon) 
Cmd.Parameters.Add("@date1",SqlDbType.Date).Value=DateTimePicker1.Value 
Cmd.Parameters.Add("@date2",SqlDbType.Date).Value=DateTimePicker2.Value 

Dim Adapter As SqlDataAdapter = New SqlDataAdapter(Cmd) 
Dim ds As DataSet = New DataSet() 
Adapter.Fill(ds, "Tr_Cashbook") 

당신은 BETWEEN 사용할 수 있습니다 및 구문 : 여전히 작동하지

QueryString = "Select * from Tr_Cashbook where newdate BETWEEN @date1 AND @date2" 
+0

. 동일한 오류를 보여줍니다. 피연산자 유형 충돌 : 날짜가 int와 호환되지 않습니다 – user1059908

+0

@ user1059908 - newdate의 필드 데이터 유형은 무엇입니까? – adatapost

+0

필드 유형 날짜 시간 – user1059908

관련 문제