【问题标题】:SQLDataReader: Dealing with null valuesSQLDataReader:处理空值
【发布时间】:2010-02-09 10:25:36
【问题描述】:

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

以下是我目前努力的代码示例;

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

【问题讨论】:

  • datemodified (如果我注释掉那一行,那么它会立即在下一行抛出另一个由维护者维护的) 空值的原因是当人们更新页面时,他们并不总是填写详细信息。就我个人而言,我不允许空值,但数据库是遗留的。
  • 您可以将您正在使用的 SQL 添加到您的问题中吗?
  • 我询问了您的 SQL,因为 Kosala 指出,如果您不对列设置别名,则会收到 IndexOutOfRange 异常。

标签: asp.net vb.net syntax null sqldatareader


【解决方案1】:

要处理代码中的空值,您可以使用 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, '')

【讨论】:

  • 感谢您的帮助。这两种方法都试过了,问题依旧。
  • 那么问题出在其他地方...您在尝试从数据读取器获取数据之前调用 Read 吗?检查 r.FieldCount 的值以查看结果中是否确实有任何列,并检查 r.GetOrdinal("datemodified") 以查看该字段是否是其中之一。
【解决方案2】:

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

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

SELECT ISNULL(datemodified, '') AS [datemodified]

【讨论】:

  • 感谢您的帮助。编辑后我有;从 id = @footid 的分组中选择 ISNULL(datemodified, '') AS datemodified, maintainby, email, hitcount。不幸的是,异常仍在发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多