SQLサーバーデータベースからレコードのリストを返すデータリーダーがあります。データベースに「Additional」というフィールドがあります。このフィールドは、時間の50%が空またはヌルです。
このフィールドがnullかどうかを確認するコードを記述しようとしています。このロジックは次のとおりです。「追加」フィールドにテキストが含まれている場合は情報を表示し、そうでない場合はフィールドを非表示にします。
私が試してみました:
if (myReader["Additional"] != null)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
上記のコードは私にこのエラーを与えます:
例外の詳細:System.IndexOutOfRangeException:Additional
どんな助けも大歓迎です...
if (myReader["Additional"] != DBNull.Value)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
if (myReader.HasRows) //The key Word is **.HasRows**
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null Or Empty";
}
私は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;
}
}
ケビン
これは正しいテスト済みのソリューションです
if (myReader.Read())
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null";
}
OleDbDataReader.IsDBNull()も使用します
if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
まず第一に、通常のDBNull
ではなくNull
をチェックしたいでしょう。
または、IsDBNull
メソッドを見ることができます
ジョー・フィリップス
SQlDataReader.IsDBNull(int index)には、列の序数が必要です。列名ではなく、列番号を使用してヌルをチェックする方法はありますか?
提示された提案に加えて、次のようにクエリから直接これを行うことができます-
SELECT ISNULL([Additional], -1) AS [Additional]
このようにして、フィールド値が<0または> = 0であるかどうかを確認する条件を記述できます。
この単純な同等の構文を試してください。
ltlAdditional.Text = (myReader["Additional"] == DBNull.Value) ? "is null" : "contains data";
AMG-すみません、ブロンドの瞬間がありました。データベースを最初に設計した後に、「追加」フィールドがデータベースに追加されました。
この新しいフィールドを使用するようにすべてのコードを更新しましたが、データベースフィールドを選択する呼び出しを行っていた実際のデータリーダーコードを更新するのを忘れていたため、「Additional」を呼び出していませんでした
私はこの種の問題も経験していますが、私の場合、DbDataReaderを汎用リーダーとして使用しています(SQL、Oracle、OleDbなど)。 DataTableを使用する場合、DataTableには次のメソッドがあります。
DataTable dt = new DataTable();
dt.Rows[0].Table.Columns.Contains("SampleColumn");
これを使用して、クエリの結果セットにその列が存在するかどうかを判断できます。 DbDataReaderにこの機能があるかどうかも調べています。
この
例:
objCar.StrDescription = (objSqlDataReader["fieldDescription"].GetType() != typeof(DBNull)) ? (String)objSqlDataReader["fieldDescription"] : "";