4

我正在处理的一些表具有空值并且正在抛出错误。到目前为止,我尝试了一些解决方案来处理空值,但均未成功。

以下是我迄今为止努力的代码示例;

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,我已经运行了查询,它工作正常(即所有列都存在)

4

2 回答 2

5

要处理代码中的空值,您可以使用 IsDBNull 方法:

Dim index As Integer = r.GetOrdinal("datemodified")
If r.IsDBNull(index) Then
   datemodified = String.Empty
Else
   datemodified = r(index)
End If

要处理 SQL 中的 null 值,您必须为字段命名,以便能够在数据读取器中按名称访问它:

select datemodified = isnull(datemodified, '')
于 2010-02-09T10:33:10.237 回答
2

IndexOutofRangeException 是因为您尝试访问的列在结果集中不存在。

当您通过 SqlDataReader 访问 Ordinal 或 Column 时,您必须指定 Column Index 或 Column Name。在您的方案中,您需要为返回的 SQL 列指定别名。

SELECT ISNULL(datemodified, '') AS [datemodified]
于 2010-02-09T10:49:10.700 回答