我只是想知道是否有人可以帮我解决以下问题。我正在使用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函数,但不确定将它放在何处。
如果有人能给我一些关于如何做到这一点的见解,我将非常感激。
提前致谢:)
答案 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)