2011-12-14 17 views
0

2つの日付の間にTr_cashbookテーブルからいくつかのレコードを選択する必要があります。日付フィールドはnewdtで、データを比較する必要があり、レコードはrptCash2という名前のクリスタルレポートに表示する必要があります。 newdtフィールドにはdatetimeプロパティがあります。ここでは、コマンドボタンvb.netの2つの日付の間でレコードを選択するとエラーオペランドタイプの衝突が発生する

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を使用してください。

あなたのパラメータ化クエリがあることshoud:

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

フィールドタイプdatetime – user1059908

関連する問題