无法从 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 重音字符