web-dev-qa-db-ja.com

データリーダーがnullまたは空かどうかを確認する方法

SQLサーバーデータベースからレコードのリストを返すデータリーダーがあります。データベースに「Additional」というフィールドがあります。このフィールドは、時間の50%が空またはヌルです。

このフィールドがnullかどうかを確認するコードを記述しようとしています。このロジックは次のとおりです。「追加」フィールドにテキストが含まれている場合は情報を表示し、そうでない場合はフィールドを非表示にします。

私が試してみました:

if (myReader["Additional"] != null)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}

上記のコードは私にこのエラーを与えます:

例外の詳細:System.IndexOutOfRangeException:Additional

どんな助けも大歓迎です...


参照:

SqlDataReaderオブジェクトの列名を確認

46
Jason
if (myReader["Additional"] != DBNull.Value)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}
66
Robert Durgin
if (myReader.HasRows) //The key Word is **.HasRows**

{

    ltlAdditional.Text = "Contains data";

}

else

{   

    ltlAdditional.Text = "Is null Or Empty";

}
11

私は3年以上DataReadersを使用していないので、自分の記憶を確認したいと思い、これを見つけました。とにかく、私がしたようにこの投稿で起こった人のために、序数の代わりに列名を使用してIsDBNullをテストするメソッドが必要で、VS 2008 +(&.NET 3.5だと思う)を使用している場合、拡張メソッドを書くことができます次のように列名を渡すことができます。

public static class DataReaderExtensions
{
    public static bool IsDBNull( this IDataReader dataReader, string columnName )
    {
        return dataReader[columnName] == DBNull.Value;
    }
}

ケビン

10
Kevin Nelson

これは正しいテスト済みのソリューションです

if (myReader.Read())
{

    ltlAdditional.Text = "Contains data";
}
else
{   
    ltlAdditional.Text = "Is null";
}
8
Ahmed Fahmy

OleDbDataReader.IsDBNull()も使用します

if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
5
catalyst

まず第一に、通常のDBNullではなくNullをチェックしたいでしょう。

または、IsDBNullメソッドを見ることができます

2
Joe Phillips

ジョー・フィリップス

SQlDataReader.IsDBNull(int index)には、列の序数が必要です。列名ではなく、列番号を使用してヌルをチェックする方法はありますか?

1
Shiva

提示された提案に加えて、次のようにクエリから直接これを行うことができます-

SELECT ISNULL([Additional], -1) AS [Additional]

このようにして、フィールド値が<0または> = 0であるかどうかを確認する条件を記述できます。

1
Kirtan

この単純な同等の構文を試してください。

ltlAdditional.Text = (myReader["Additional"] == DBNull.Value) ? "is null" : "contains data";
0
cnom

AMG-すみません、ブロンドの瞬間がありました。データベースを最初に設計した後に、「追加」フィールドがデータベースに追加されました。

この新しいフィールドを使用するようにすべてのコードを更新しましたが、データベースフィールドを選択する呼び出しを行っていた実際のデータリーダーコードを更新するのを忘れていたため、「Additional」を呼び出していませんでした

0
Jason

私はこの種の問題も経験していますが、私の場合、DbDataReaderを汎用リーダーとして使用しています(SQL、Oracle、OleDbなど)。 DataTableを使用する場合、DataTableには次のメソッドがあります。

DataTable dt = new DataTable();
dt.Rows[0].Table.Columns.Contains("SampleColumn");

これを使用して、クエリの結果セットにその列が存在するかどうかを判断できます。 DbDataReaderにこの機能があるかどうかも調べています。

0
Rob

この

例:

objCar.StrDescription = (objSqlDataReader["fieldDescription"].GetType() != typeof(DBNull)) ? (String)objSqlDataReader["fieldDescription"] : "";