2016-05-04 6 views
2

私の条件を満たすデータベースから文字列を返すメソッドを作成しようとしています。データリーダーで空のアクセスフィールドを検出する方法C#

最初の状態は正常です。 しかし、2番目の条件は、アクセスのエントリの一部が空で、少なくとも1つのフィールドです。

これは私のコードです:

OleDbCommand datacommand = new OleDbCommand(); 
datacommand.Connection = dataConnection; 
datacommand.CommandText = "SELECT numNumber, numLocation " + 
          "FROM  tblNumbers " + 
          "ORDER BY numID "; 
OleDbDataReader dataReader = datacommand.ExecuteReader(); 
while (dataReader.Read()) 
{ 
    if (MatchServiceLetters(dataReader.GetString(0))) // && dataReader.GetInt32(1) == null?/) 
} 
return dataReader.GetString(0); 

int型のフィールドが空の場合は、nullとの比較が機能していません。どうすればそれが空であるかを知ることができますか? MSDNから

+1

'DBNull'はあなたの友達です。 – t0mm13b

+1

あなたはIsNullを使うことができます:ISNULL(check_expression、replacement_value) – Sorceri

+0

t0mm13bあなたは私のヒーローです。 –

答えて

0

無変換は行われません。したがって、取り出されるデータは、すでに32ビットの符号付き整数でなければなりません。 このメソッドを呼び出す前にnull値を検索するにはIsDBNullを呼び出します。

だからあなたが使用します。

if(!dataReader.IsDBNull(1)) 
{ 
    return dataReader.GetInt32(1); 
} 
else 
{ 
    return 0; // or better yet, make your method return Nullable<int> 
} 
+1

あなたはすべてのものをIsNull(numNumber、0)に置き換えることができ、それはすべてSQL – Sorceri

+0

@Sorceriによって処理されますが、そこに問題が混在し始めています。 sprocsが再利用されることは珍しいことではなく、NULLがその列の有効な値であれば問題を引き起こす可能性があります。一般に、紛失したデータを表すためにはマジック値を使用するのは良い考えではありません(したがって、Nullable型の使用を推奨します)。 – DVK