我正在处理的一些表具有空值并且正在抛出错误。到目前为止,我已经尝试了一些处理空值的解决方案,但没有成功。
以下是我迄今为止努力的代码示例;
If (r("datemodified").Equals(DBNull.Value)) Then
datemodified = String.Empty
Else
datemodified = (r("datemodified"))
End If
和
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
和;
If r.IsDBNull("datemodified") Then
datemodified = String.Empty
Else
datemodified = (r("datemodified"))
并通过sql;
Select isnull(datemodified, '')
最终结果是IndexOutOfRangeException。
这是sql;
select datemodified, maintainedby, email, hitcount from grouping where id = @footid
ps,我运行了查询,它运行正常(即所有cols都存在)
答案 0 :(得分:5)
要处理代码中的空值,可以使用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, '')
答案 1 :(得分:2)
IndexOutofRangeException是您尝试访问的列的becoz在结果集中不存在。
当您通过SqlDataReader访问Ordinal或Column时,必须指定Column Index或Column Name。在您的方案中,您需要为返回的SQL列指定别名。
SELECT ISNULL(datemodified, '') AS [datemodified]