条件表达式中的数据类型不匹配(vb.net,access)

时间:2016-04-03 22:19:16

标签: vb.net ms-access-2007

我正在尝试将数据从数据库传输到网格。条件为SELECT * FROM entries WHERE edate='" & Me.dtpDate.Value.Date & "'"但是我在条件表达式enter image description here中收到错误消息数据类型不匹配。请参阅下面的代码。此外,我附上了错误消息的屏幕截图。

    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

1 个答案:

答案 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
....