Выбор записей между двумя датами в vb.net выдает ошибку операнда типа clash - PullRequest
0 голосов
/ 14 декабря 2011

Мне нужно выбрать несколько записей из таблицы Tr_cashbook между двумя датами. поле даты - newdt, в котором мне нужно сравнить данные, и записи должны быть показаны в отчете Crystal с именем rptCash2. поле newdt имеет свойство datetime. вот код на кнопке команды

    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()

но это не работает когда я нажимаю командную кнопку, это дает ошибку, поскольку тип операнда clash: date несовместим с int. Я не могу узнать, где я иду не так. помоги мне с этим ..

1 Ответ

1 голос
/ 14 декабря 2011

Используйте parameters вместо жестко запрограммированной строки sql.

Ваш параметризованный запрос должен быть:

 QueryString = "Select * from Tr_Cashbook where newdt>=@date1 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")

Вы можете использовать синтаксис между AND и:

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