2011-01-19 10 views
16

オープンMySqlDataReaderNULL値を確認するにはどうすればよいですか?MySqlDataReaderで列の名前でNULLをチェックする方法は?

以下は機能しません。唯一の列番号ではなく名前を受け入れる

if (rdr.GetString("timeOut") == null) 
{ 
    queryResult.Egresstime = "Logged in"; 
} 
else 
{ 
    queryResult.Egresstime = rdr.GetString("timeOut"); 
} 

rdr.IsDbNull(int i):それは常にelseを打つのです。

答えて

28
var ordinal = rdr.GetOrdinal("timeOut"); 
if(rdr.IsDBNull(ordinal)) { 
    queryResult.Egresstime = "Logged in"; 
} else { 
    queryResult.Egresstime = rdr.GetString(ordinal); 
}//if 

または

if(Convert.IsDBNull(rdr["timeOut"])) { 
    queryResult.Egresstime = "Logged in"; 
} else { 
    queryResult.Egresstime = rdr.GetString("timeOut"); 
}//if 
+0

あなたは自分のグリーンチェックの勝者です。私は2番目を使いました。ありがとう! – rd42

+0

2番目の例の小さなタイプミス: "IsDbNull"を "IsDBNull"に変更 – 4mla1fn

+0

@ 4mla1fnありがとう、私は私の答えを編集しました。 –

13

場合(rdr.GetString( "タイムアウト")== DBNull.Valueの)

null私は申し訳ありませんが、間違った答えだ DBNull

と同じではありません、サム・Bは右です。私はこれをDataRowのものと誤解しました。

SqlDataReaderは厳密に型付きGetString()であり、この場合はIsDBNull(int column)となります。

+2

私はそれが 'DBNull.Value' – VoodooChild

+0

@BoodooChildされるべきだと思う - 私はエラー\t 1を得る相続人は何を感謝 – Axarydax

+0

:演算子「==」はタイプのオペランドに適用することはできません'string'と 'System.DBNull' – rd42

1

null~DBNull.Value

+0

私は何を得ますか?エラー\tオペレータ '=='は 'string'と 'System.DBNull'タイプのオペランドには適用できません - – rd42

1

また、行うことができます。

If (string.IsNullOrEmpty(rdr.GetString("timeOut"))

+0

(rdr.GetString( "timeOut")== nullと同じ効果があります) – rd42

+1

@ rd42:だから、デバッグ時にそのフィールドの実際の値は?ちょっと興味があるんだけど? – VoodooChild

+0

値は:12/7/2010 10:16:46 AMありがとうございました。 – rd42

3

値がDbNullであるかどうかを判断するためにrdr.IsDBNull(column)を呼び出す必要があります。

1

あなたはDBNull.ValueでNULLフィールドからretriveオブジェクトを比較することができます。

0

ここで一つだ私が好き:

var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column"); 

例えば(元の要件のため)

queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut"); 
関連する問題