コラムの名前でmysqldatareaderでnullを確認する方法は?
-
12-10-2019 - |
質問
どうすれば確認できますか NULL
オープンの価値 MySqlDataReader
?
以下は機能しません。それは常にヒットしています else
:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i)
名前ではなく、列番号のみを受け入れます。
解決
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
他のヒント
if(rdr.getString( "Timeout")== dbnull.Value)
null
と同じではありません DBNull
申し訳ありませんが、間違った答え、サムBは正しいです。私はこれを間違えました DataRow
もの。
Sqldatareaderは強く入力されています GetString()
と提供します IsDBNull(int column)
この場合。
あなたは電話する必要があります rdr.IsDBNull(column)
値があるかどうかを判断します DbNull
.
nullフィールドから取得するオブジェクトをと比較できます dbnull.value.
変化する null
に DBNull.Value
.
あなたもできます:
If (string.IsNullOrEmpty(rdr.GetString("timeOut"))
これが私が好きなものです:
var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column");
例えば (元の要件の場合):
queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");
これが私が読むために作成した方法です DBNull
aを返します default(T)
万一に備えて:
private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
{
if (reader.IsDBNull(ordinal))
{
return default(T);
}
return getValue(ordinal);
}
このように使用できます。
if (reader.Read())
{
account = new Account();
account.Id = reader.GetInt32(0);
account.Name = reader.GetString(1);
account.MailVerifiedAt = GetNullable(reader, 2, reader.GetDateTime);
account.MailToken = GetNullable(reader, 3, reader.GetString);
}
一般的なタイプ T
の返品値に基づいて解決されます reader.
- 方法。文字列を返すと、を受け取ります null
の場合には DBNull
. 。それが int
それは戻ってきます 0
, 、など
注:整数値については、 0
ので注意してください。
所属していません StackOverflow