Database DBnull到整数转换错误
我得到从类型“DBNull”到类型“Integer”的转换无效。“Dim avgObject As string=Cstr(avgCom.ExecuteScalar())行上的错误” 如果删除了Database DBnull到整数转换错误,database,vb.net,Database,Vb.net,我得到从类型“DBNull”到类型“Integer”的转换无效。“Dim avgObject As string=Cstr(avgCom.ExecuteScalar())行上的错误” 如果删除了where module_ID='“&moduleSelect&'语句,并且我不知道如何修复此问题,有人能帮忙吗 Dim moduleSelect As String = moduleRadio.SelectedValue Using connection As New SqlConnec
where module_ID='“&moduleSelect&'
语句,并且我不知道如何修复此问题,有人能帮忙吗
Dim moduleSelect As String = moduleRadio.SelectedValue
Using connection As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True")
Using avgCom As New SqlCommand("SELECT AVG(exam) FROM completed_module where module_ID='" & moduleSelect & "' ", _
connection)
connection.Open()
Dim avgObject As Integer = CInt(avgCom.ExecuteScalar())
Dim averageVar As String
averageVar = avgObject.ToString
avgLabel.Text = averageVar
End Using
改用Convert.ToString。Directcast as字符串不适用于Null/Nothing 更新 当您没有收到任何结果时,问题就会发生 我进行了测试,所以CStr to Convert.ToString适用于DBNUll,但是CInt和Convert.ToIntXX仍然抛出一个eception。 你可以用
Dim scalarResult = avgCom.ExecuteScalar()
If Convert.IsDBNull(scalarResult) then
avgObject = 0
Else
avgObject = Convert.toInt32(scalarResult)
End If
DBNull
表示数据库中的记录不包含列的值。所以基本上你是想把“无”转换成一个数字
你希望你的程序做什么?跳过这一排?是否改为使用默认值
如果从命令中删除语句时命令真的“有效”,我建议您只需删除它。我相信您正在寻找类似的内容,首先检查它是否为dbnull:
Dim moduleSelect As String = moduleRadio.SelectedValue
Using connection As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True")
Using avgCom As New SqlCommand("SELECT AVG(exam) FROM completed_module where module_ID='" & moduleSelect & "' ", _
connection)
connection.Open()
Dim result = avgCom.ExecuteScalar()
If IsDBNull(result) then return
Dim avgObject As Integer = CInt(result)
Dim averageVar As String
averageVar = avgObject.ToString
avgLabel.Text = averageVar
End Using
错误:
从类型“DBNull”到类型“Integer”的转换无效。
发生此错误的原因是查询返回一个NULL
值。。您可以使用以下代码管理NULL
值
试着像下面一样,它会帮助你
connection.Open()
Dim result As String = avgCom.ExecuteScalar().ToString()
Dim avgObject As Integer = If(result = "", 0, CInt(result))
这可能会失败,因为缺少一个值。(即空值) 但如果遇到空行,则默认为0,则可能会起作用:
SELECT AVG(ISNULL(exam,0)) FROM completed_module where module_ID=
否则,请确保表中不包含该列的空值:
UPDATE completed_module SET exam = 0 WHERE exam IS NULL
(可能会对其进行约束,使其将来也不会有空值;))
编辑:这假设您实际上可以为每一行设置一个平均值,即使您访问的列为NULL,在这种情况下,我假设NULL不会向您的平均值添加任何内容(共享该ID的其他行可能会添加该值)因此,我将其默认为0谷歌搜索从类型“DBNull”转换为类型“Integer”的
无效。
有近8000个结果。您可以运行查询选择平均值(检查)。。其中模块ID=nnn
?我认为,它返回null是因为没有您传入的模块ID的记录。加载页面时没有从列表中选择值,因此返回null,感谢大家的帮助。