【发布时间】:2014-06-10 14:12:24
【问题描述】:
我收到了这个问题
从“DBNull”类型到“String”类型的转换无效。
第 501 行:hfSupEmail.Value = dt.Rows(0)("SupEmail")
我对此很陌生,我不确定确切的问题是什么 有人可以指导我吗?
非常感谢
【问题讨论】:
标签: asp.net vb.net string dbnull
我收到了这个问题
从“DBNull”类型到“String”类型的转换无效。
第 501 行:hfSupEmail.Value = dt.Rows(0)("SupEmail")
我对此很陌生,我不确定确切的问题是什么 有人可以指导我吗?
非常感谢
【问题讨论】:
标签: asp.net vb.net string dbnull
快速而肮脏的修复:
hfSupEmail.Value = dt.Rows(0)("SupEmail").ToString()
或者对于 C#:
hfsupEmail.Value = dt.Rows[0]["SupEmail"].ToString();
当您的最终目标和源数据已经是字符串时,这非常有效,因为任何额外的 .ToString() 调用可能会被抖动优化为无操作,如果它是 NULL生成的 DBNull.Value.ToString() 表达式会生成您想要的空字符串。
但是,如果您使用的是非字符串类型,您最终可能会做 重要 额外的工作,尤其是像 DateTime 或需要特定格式的数值之类的东西。请记住,国际化问题意味着解析和组合日期和数值实际上是非常昂贵的操作;为避免这些操作而做“额外”工作通常是非常值得的。
【讨论】:
con.Open()
cmd = New SqlCommand
cmd.CommandText = " select sum (Income_Amount) from Income where Income_Month= '" & ComboBox1.Text & "' and Income_year=" & txtyearpro.Text & ""
cmd.Connection = con
dr = cmd.ExecuteReader
If dr.Read = True Then
txtincome1.Text = dr(0).ToString ' ToString converts null values into string '
End If
【讨论】:
最简单的方法可能就是将它与一个空字符串连接起来:
hfSupEmail.Value = dt.Rows(0)("SupEmail") & ""
【讨论】:
您可以将Field method of the Datarow 与If Operator 结合使用来检查一行中的Null 值,如下所示。如果为 null,您可以将其替换为空字符串(或您选择的其他字符串):
hfSupEmail.Value = If(dt.Rows(0).Field(Of String)("SupEmail"), "")
【讨论】:
希望这个帮助....
dt.Rows(0)("SupEmail") 返回 null
在分配之前避免这个检查
If Not IsDBNull(dt.Rows(0)("SupEmail")) Then
hfSupEmail.Value = dt.Rows(0)("SupEmail")
End If
【讨论】:
要从代码中处理,这里有一个小的扩展方法
Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices
Public Module HTMLExtensionMethods
<Extension()> _
Public Function DefaultIfDBNull(Of T)(ByVal obj As Object) As T
Return If(Convert.IsDBNull(obj), CType(Nothing, T), CType(obj, T))
End Function
End Module
这样称呼它。
hfSupEmail.Value = dt.Rows(0)("SupEmail").DefaultIfDBNull(Of String)()
【讨论】:
您应该在数据库查询级别本身处理它。
代替“从学生中选择姓名”,使用“从学生中选择 IsNull(name,'') as name”这样,DB 会处理你的 NULL 值。
【讨论】:
显然你的dt.Rows(0)("SupEmail") 是来自数据库的NULL,你不能将NULL 分配给字符串属性。尝试将该行替换为:
hfSupEmail.Value = If(IsDbNull(dt.Rows(0)("SupEmail")), String.Empty, dt.Rows(0)("SupEmail").ToString)
代码检查 value 是否为 NULL,如果是 - 将其替换为空字符串,否则使用原始值。
【讨论】: