我的代码有问题吗?
Posted
技术标签:
【中文标题】我的代码有问题吗?【英文标题】:Something wrong with my code? 【发布时间】:2014-06-15 12:37:22 【问题描述】:我遇到“从类型 'DBNull' 到类型'String' 的转换无效”错误。
函数调用 (GetNoofHoursOfTImeIn):
Public Shared Function GetNoofHoursofTImeIn(ByVal search As String, ByVal dfrom As DateTime, ByVal dto As DateTime) As DataTable
Dim dtoffenseinfo As New DataTable
If Not DBConnection.State = ConnectionState.Open Then
DBConnection.Open()
End If
Using cmd As New OleDbCommand
cmd.Connection = DBConnection
cmd.CommandText = _
"SELECT SUM(No_of_Hour) AS THour FROM EmployeeAttendance " & _
"WHERE EmployeeID = ? " & _
"AND WorkingDate BETWEEN ? AND ?"
cmd.Parameters.AddWithValue("?", search)
cmd.Parameters.AddWithValue("?", dfrom.Date)
cmd.Parameters.AddWithValue("?", dto.Date)
Using adapter As New OleDbDataAdapter(cmd)
adapter.Fill(dtoffenseinfo)
End Using
End Using
DBConnection.Close()
Return dtoffenseinfo
End Function
后面的代码:
txtPresentDays.Text = ClsAttendance.GetNoofHoursofTImeIn(EmployeeID.Text, MyDateString, MyDateString2).Rows(0).Item("THour")
我知道这个错误很常见,但直到现在我还不太清楚我是如何或为什么会出现这个错误的。
感谢您的启发!
【问题讨论】:
【参考方案1】:当有零个符合条件的记录时,您会得到一个空值。您可以使用iif
函数将该值变为零:
SELECT IIF(SUM(No_of_Hour) Is Null, 0, SUM(No_of_Hour)) ...
【讨论】:
@ProgrammingDreamer:抱歉,我正在阅读一些关于isnull
如何在 Access 中工作的错误信息的文章。您可以改用iif
函数。我更正了上面的代码。
好吧,我不再收到错误消息了。但我也没有检索任何数据。我有一种强烈的感觉,我的数据库数据和 DateTimePickers 值之间的日期格式不匹配。非常感谢 Guffa 爵士提供的代码,我相信它会在未来解决更多这些错误!
次要点:几乎没有适合 'IIf' 的实例 - 请改用 'If' 运算符。
@DaveDoknjas:你是说iif
不合适吗?我找不到任何支持它的东西。
@ProgrammingDreamer:当您使用参数时,您不必担心格式化,因为数据库驱动程序应该会处理这些问题。首先检查您是否在方法中获得了正确的 DateTime
值。以上是关于我的代码有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章