我的代码有问题吗?

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 值。

以上是关于我的代码有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

我的 cURL 代码有啥问题(http 状态为 0)吗?

db.collection.insertMAny 不工作,我的代码有问题吗?

有人可以帮我找出我的代码有啥问题吗?

我的 php 代码能记住我的选择吗? [复制]

有啥方法可以在我的代码中注入 SQL 吗? [复制]

有啥方法可以在我的代码中注入 SQL 吗? [复制]