C# 如何通过列';她叫什么名字?
如何在打开的C# 如何通过列';她叫什么名字?,c#,mysql,null,dbnull,mysqldatareader,C#,Mysql,Null,Dbnull,Mysqldatareader,如何在打开的MySqlDataReader中检查NULL值 以下方法不起作用;它总是按其他: if (rdr.GetString("timeOut") == null) { queryResult.Egresstime = "Logged in"; } else { queryResult.Egresstime = rdr.GetString("timeOut"); } rdr.IsDbNull(int i)只接受列号,不接受名称。if(rdr.GetString(“timeO
MySqlDataReader
中检查NULL
值
以下方法不起作用;它总是按其他
:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
rdr.IsDbNull(int i)
只接受列号,不接受名称。if(rdr.GetString(“timeOut”)==DBNull.Value)
null
与DBNull
对不起,回答错了,山姆B是对的。我把它误认为是数据行的东西
SqlDataReader确实具有强类型的
GetString()
,并为这种情况提供了IsDBNull(int列)
。将null
更改为DBNull.Value
您还可以执行以下操作:
If(string.IsNullOrEmpty(rdr.GetString(“timeOut”))
必须调用rdr.IsDBNull(column)
以确定值是否为DbNull
var ordinal = rdr.GetOrdinal("timeOut");
if(rdr.IsDBNull(ordinal)) {
queryResult.Egresstime = "Logged in";
} else {
queryResult.Egresstime = rdr.GetString(ordinal);
}//if
或
您可以将从空字段检索的对象与进行比较。这里有一个我喜欢的对象:
var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column");
例如(对于原始要求):
下面是我创建的一个方法,用于读取
DBNull
,并返回default(T)
以防万一:
private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
{
if (reader.IsDBNull(ordinal))
{
return default(T);
}
return getValue(ordinal);
}
泛型类型T
将根据读取器的返回值进行解析。
-方法。如果它返回字符串,则在DBNull
的情况下,您将收到null
。如果它是int
则返回0
,以此类推
注意:对于整数值,可能不需要获取0
,因此请小心。私有的T GetNullableValue(MySqlDataReader rdr,字符串参数名称)
private T GetNullableValue<T>(MySqlDataReader rdr, string parameterName)
{
object value = rdr[parameterName];
if (value is DBNull)
return default;
return (T)value;
}
{
对象值=rdr[parameterName];
if(值为DBNull)
返回默认值;
返回(T)值;
}
以及用法,例如:
string message = GetNullableValue<string>(rdr, "Message");
bool flag = GetNullableValue<bool>(rdr, "Flag");
DateTime startTime = GetNullableValue<DateTime>(rdr, "StartTime");
string message=GetNullableValue(rdr,“message”);
bool标志=GetNullableValue(rdr,“标志”);
DateTime startTime=GetNullableValue(rdr,“startTime”);
我认为应该是DBNull.Value
以下是我得到的错误1:运算符“==”不能应用于类型为“string”和“System.DBNull”的操作数,其效果与(rdr.GetString(“timeOut”)==null)相同@rd42:那么,当您调试时,该字段中的实际值是多少?只是好奇而已?值是:12/7/2010 10:16:46谢谢您的帮助。下面是我得到的错误1:运算符“==”不能应用于“string”和“System.DBNull”类型的操作数–您是自己绿色检查的赢家。我使用了第二个。谢谢!中的小错误第二个示例:将“IsDbNull”更改为“IsDbNull”,这对于空检查来说太长了。
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);
}
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");