SQLDataReader:处理空值
问题描述:
我正在处理的一些表具有空值并引发错误。到目前为止,我尝试了几个解决方案来处理空值,但没有成功。SQLDataReader:处理空值
以下是我迄今为止努力的代码示例;
If (r("datemodified").Equals(DBNull.Value)) Then
datemodified = String.Empty
Else
datemodified = (r("datemodified"))
End If
and;
If r.HasRows Then
datemodified = (r("datemodified"))
Else
datemodified = String.Empty
End If
和;
If r("datemodified") = Nothing Then
datemodified = String.Empty
Else
datemodified = (r("datemodified"))
End If
and;
If r.IsDBNull("datemodified") Then
datemodified = String.Empty
Else
datemodified = (r("datemodified"))
and via sql;
Select isnull(datemodified, '')
最终结果是IndexOutOfRangeException。
这里是sql;
select datemodified, maintainedby, email, hitcount from grouping where id = @footid
PS的,我已经跑了查询,它工作正常(存在即所有的cols)
答
以处理代码中的空值可以使用IsDBNull方法:
Dim index As Integer = r.GetOrdinal("datemodified")
If r.IsDBNull(index) Then
datemodified = String.Empty
Else
datemodified = r(index)
End If
为了处理空值在SQL你必须给该领域的名称,能够通过名称在数据读取器访问它:
select datemodified = isnull(datemodified, '')
答
IndexOutofRangeException是您试图访问的列在结果集中不存在的原因。
当您通过SqlDataReader访问Ordinal或Column时,必须指定Column Index或Column Name。在你的场景中,你需要为返回的SQL列指定一个别名。
SELECT ISNULL(datemodified, '') AS [datemodified]
+0
感谢您的帮助。编辑后,我有; 选择ISNULL(日期修改,'')AS修改日期,维护日期,电子邮件,来自分组的地点,其中id = @footid。不幸的是,例外情况仍在发生。 – Phil 2010-02-09 11:05:26
'IOORE' _where_? – 2010-02-09 10:28:00
datemodified(如果我对该行进行注释,那么它立即在维护的下一行上引发另一行)。空值的原因是人们更新页面时,他们并不总是填写详细信息。我个人会拒绝空值,但分贝是遗产。 – Phil 2010-02-09 10:32:53
你可以将你正在使用的SQL添加到你的问题中吗? – Kamal 2010-02-09 10:44:51