如何处理从“DBNull”类型到“Integer”类型的转换无效

时间:2013-12-16 09:53:42

标签: sql vb.net

我只是想知道是否有人可以帮我解决以下问题。我正在使用VB。 NET和SQL Server,并希望在我的代码中包含一些错误处理。

我正在执行SQL SUM命令,如果数据库中存在匹配项,则返回正常,没有任何问题。但是当我指定的字符串没有匹配时,我得到一个“从类型'DBNull'转换为'Integer'类型无效。”

我理解发生此错误是因为我在我指定的数据库中没有值。

以下是我正在使用的代码,其中不包含错误处理:

Dim dbCount1 As Integer
    SQLConnectLog()
    strSQLog = "SELECT SUM ([TotalTime]) FROM [Line1Log] WHERE ([State] = 'Test')"
    dbCommandLog = New SqlCommand(strSQLog, dbConnectionLog)
    dbCount1 = dbCommandLog.ExecuteScalar()
    SQLDisconnectLog()
    lblTest.Text = dbCount1

现在我尝试了几种不同的方法来使用isDBNull,但无济于事,例如:

Dim dbCount1 As Integer
    SQLConnectLog()
    strSQLog = "SELECT SUM ([TotalTime]) FROM [Line1Log] WHERE ([State] = 'Test')"
    dbCommandLog = New SqlCommand(strSQLog, dbConnectionLog)
    If IsDBNull(dbCount1 = dbCommandLog.ExecuteScalar()) Then
        SQLDisconnectLog()
        lblTest.Text = dbCount1
    Else
        lblTest.Text = "0"
    End If

我上面使用的方法仍然不起作用。

我确信我需要使用isDBNull函数,但不确定将它放在何处。

如果有人能给我一些关于如何做到这一点的见解,我将非常感激。

提前致谢:)

5 个答案:

答案 0 :(得分:4)

纯SQL解决方案可以依赖于coalesce或isnull这个简单的查询只返回一个聚合列。

SELECT COALESCE(SUM ([TotalTime]), 0) FROM [Line1Log] WHERE ([State] = 'Test')

答案 1 :(得分:3)

尝试将dbCount1更改为可空整数

Dim dbCount1 As Nullable(Of Integer)

或者

Dim dbCount1 As Integer?

答案 2 :(得分:1)

尝试下面的条件,而不是你的,

If(dbCommandLog.ExecuteScalar() = DBNull.Value, False, True)

答案 3 :(得分:0)

dbCount1 =CInt(dbCommandLog.ExecuteScalar())

试用此代码

答案 4 :(得分:0)

将dbCount1定义为Nullable整数并调用dbCount.HasValue以检查该值是Null还是有效整数:

....
Dim dbCount1 as Integer? = dbCommandLog.ExecuteScalar()
if (dbCount1.HasValue) Then
    lblTest.Text = dbCount1
...

更好的选择是使用If运算符,如果第一个参数为null,则返回默认值:

Dim dbCount1 as Integer? = dbCommandLog.ExecuteScalar()
lblTest.Text=If(dbCount1,0)