无法从 Access DB 查询中检索数据到我的 VB 程序

Posted

技术标签:

【中文标题】无法从 Access DB 查询中检索数据到我的 VB 程序【英文标题】:Can't retrieve data from Access DB query to my VB program 【发布时间】:2016-07-13 21:43:50 【问题描述】:

到目前为止,这是我的代码... 我有 2 个 DateTimePickers,其中用户选择一周的第一天和一周的最后一天,一旦选择了这两个,我想计算每天的工作时间并将它们相加,这样我就可以显示工作时间选定的天数间隔。

My Work 表包含一个 idEmployee、Date、ArrivalTime、DepartureTime 和一个显示当天工作小时数的计算列 (Hrs_worked)。

当我运行程序时,会弹出一个消息框并显示“从类型 'DBNull' 到类型'String' 的转换无效”或“条件表达式中的数据不匹配” 我是否需要将 datetimepickers 值更改为字符串值?

我正在使用 Access 数据库开发 Visual Basic Express 2010

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

    Dim provider As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
    Dim dataFile As String = "E:\SIDB.accdb"
    Dim connString As String = provider & dataFile
    Dim myConnection As OleDbConnection
    Dim cmd As OleDbCommand

    Dim qHrsWorked As String = "SELECT SUM(Hrs_worked) FROM Work WHERE IdEmployee = " & idEmptxt.Text & " AND Date >= " & firstDayDTP.Value & " AND Date <= " & lastDayDTP.Value & ""

    myConnection = New OleDbConnection(connString)
    Try
        myConnection.Open()
        cmd = New OleDbCommand(qHrsWorked, myConnection)
        Dim reader As OleDbDataReader = cmd.ExecuteReader()

        While reader.Read
            hrsWorkedtxt.Text = reader.Item(0)

        End While
        reader.Close()
        cmd.Dispose()
        myConnection.Close()

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try


End Sub

【问题讨论】:

你在哪一行得到了异常? 数据不匹配是因为你没有使用SQL参数。时期。 DbNull 转换错误可能是当没有记录匹配传递的查询时,可能由于没有使用 SQL 参数而导致格式错误。此外,您的应用程序正在泄漏资源。并使用 SQL 参数。 【参考方案1】:

我已经很多年没有编写 Access 查询了,现在也没有尝试过,但是如果我没记错的话,查询中的 DateTime 值需要用井号 (#) 括起来。

Dim qHrsWorked As String = _
    "SELECT SUM(Hrs_worked) FROM Work WHERE IdEmployee = " & idEmptxt.Text & _
    " AND Date >= #" & firstDayDTP.Value & "# AND Date <= #" & LastDayDTP.Value & "#"

【讨论】:

【参考方案2】:

在 SQL 中,您必须对日期值使用格式化的字符串表达式:

Dim qHrsWorked As String = "SELECT SUM(Hrs_worked) FROM Work WHERE IdEmployee = " & idEmptxt.Text & " AND Date >= #" & firstDayDTP.Value.ToString("yyyy'/'MM'/'dd") & "# AND Date <= #" & lastDayDTP.Value.ToString("yyyy'/'MM'/'dd") & "#"

【讨论】:

非常感谢【参考方案3】:

我怀疑这是因为您使用 Textbox.Text 作为日期选择器。只有当控件具有焦点时,您才能使用该属性。尝试用 .Value 替换那些?

【讨论】:

我更改为 .Value,现在错误消息在表达式 'IdEmployee = 1 AND Date >= 02/07/2016 05:06:37 pm AND 中显示此“语法错误(缺少运算符)日期 >= 08/07/2016 05:06:37 pm'。"

以上是关于无法从 Access DB 查询中检索数据到我的 VB 程序的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 PDO_ODBC 从 Access 检索 UTF-8 重音字符

即使它存在,我也无法从 mongodb 中检索值

从db查询中检索数据以获取复选框列表

无法为 MS Access 数据库中的同一表查询编写左外连接

如何使用 Jackcess 从查询而不是从表中检索数据

无法从 C 中的 Berkeley DB 检索值