4

私が扱っているいくつかのテーブルには null 値があり、エラーがスローされています。これまでのところ、ヌルに対処するためにいくつかの解決策を試しましたが、成功していません。

これまでの私の取り組みのコード サンプルを次に示します。

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

コードで null 値を処理するには、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 は、アクセスしようとしている列が結果セットに存在しないためです。

Ordinal または SqlDataReader を介して列にアクセスする場合は、列インデックスまたは列名を指定する必要があります。シナリオでは、返される SQL 列のエイリアスを指定する必要があります。

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