我正在尝试将数据从数据库传输到网格。条件为SELECT * FROM entries WHERE edate='" & Me.dtpDate.Value.Date & "'"
但是我在条件表达式中收到错误消息数据类型不匹配。请参阅下面的代码。此外,我附上了错误消息的屏幕截图。
Private Sub dtpDate_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtpDate.Leave
'GetDayBookOpeningBalance()
If Me.lblHeading1.Text <> "Daybook entry" Then
Using MyConnection As OleDb.OleDbConnection = FrmCommonCodes.GetConnection(),
MyAdapter As New OleDb.OleDbDataAdapter("SELECT * FROM entries WHERE edate='" & Me.dtpDate.Value.Date & "'", MyConnection)
'Format(Me.dtpDate.Value.Date, "dd/MM/yyyy"))
If MyConnection.State = ConnectionState.Closed Then MyConnection.Open()
Using MyDataSet As New DataSet
MyAdapter.Fill(MyDataSet, "entries")
Me.grdDayBook.DataSource = MyDataSet.Tables("entries")
Dim DataSetRowCount As Integer = MyDataSet.Tables("entries").Rows.Count
If DataSetRowCount > 0 Then
SetGridProperty()
Else
ShowBlankGrid()
FrmCommonCodes.MessageDataNotFound()
End If
End Using
End Using
Else
ShowBlankGrid()
End If
End Sub
答案 0 :(得分:3)
这正是不使用参数化查询可能发生的情况
我敢打赌你的列edate是一个Date / Time类型的列,但你将Me.dtpDate.Value.Date
连接到sql string命令的其余部分。
这会强制从DateTime自动转换为String,但转换不是您希望看到的转换。
如果您使用参数,则不会进行转换,数据库引擎会准确了解您要传递的内容。
Dim sqlText = "SELECT * FROM entries WHERE edate=@dt"
MyAdapter As New OleDb.OleDbDataAdapter(sqlText, MyConnection)
MyAdapter.SelectCommand.Parameters.Add("@dt", OleDbType.Date).Value = Me.dtpDate.Value.Date
....