如何检查NULL
open 中的值MySqlDataReader
?
以下不起作用;它总是击中else
:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i)
只接受列号,不接受名称。
如何检查NULL
open 中的值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
对不起,错误的答案,Sam 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");
private T GetNullableValue<T>(MySqlDataReader rdr, string parameterName)
{
object value = rdr[parameterName];
if (value is DBNull)
return default;
return (T)value;
}
以及用法例如:
string message = GetNullableValue<string>(rdr, "Message");
bool flag = GetNullableValue<bool>(rdr, "Flag");
DateTime startTime = GetNullableValue<DateTime>(rdr, "StartTime");
这是我创建的一个用于读取DBNull
和返回default(T)
incase 的方法:
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
,等等。
注意:对于整数值,可能不需要得到 a0
所以要小心。