标准表达式中的数据类型不匹配(vb.net,访问)

Posted

技术标签:

【中文标题】标准表达式中的数据类型不匹配(vb.net,访问)【英文标题】:Data type mismatch in criteria expression (vb.net, access) 【发布时间】:2016-04-03 22:19:15 【问题描述】:

我正在尝试将数据从数据库中提取到网格中。条件是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

【问题讨论】:

这正是不使用参数化查询可能发生的情况。表中 edate 列的数据类型是什么?如果它不是一个字符串,为什么你将一个字符串作为值传递? 当您在 SQL 中的日期周围加上刻度时,它会变成文本。使用 SQL 参数来保留实际的数据类型。如果你只是想扔掉它们,也不需要创建 DataAdapter 和 DataSet。 【参考方案1】:

这正是不使用参数化查询可能发生的情况。 我敢打赌,您的 edate 列是日期/时间类型的列,但您将 Me.dtpDate.Value.Date 连接到 sql 字符串命令的其余部分。 这会强制从 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
....

【讨论】:

Steve,Plutonix 现在可以工作了。我将来也寻求您的帮助...非常感谢...(Y)

以上是关于标准表达式中的数据类型不匹配(vb.net,访问)的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET 数据类型不匹配,数据输入过长

条件表达式中的数据类型不匹配

ms 访问 2007 更新错误运行时错误 3464,条件表达式中的数据类型不匹配

在线急等:“标准表达式中数据类型不匹配。”

C# AND ACCESS - 标准表达式中的数据类型不匹配

使用 MS Access 的 C# 标准表达式中的数据类型不匹配?