如何通过列的名称检查MySqlDataReader中的NULL?

时间:2011-01-19 19:19:47

标签: c# mysql null dbnull mysqldatareader

如何在开放式NULL中检查MySqlDataReader值?

以下不起作用;它始终击中else

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

rdr.IsDbNull(int i)只接受列号,而不是名称。

9 个答案:

答案 0 :(得分:31)

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

答案 1 :(得分:14)

if(rdr.GetString(“timeOut”)== DBNull.Value)

nullDBNull

不同

对不起,错误的回答,Sam B是对的。我把这误认为DataRow

SqlDataReader确实有强类型GetString()并为此案例提供了IsDBNull(int column)

答案 2 :(得分:3)

您必须致电rdr.IsDBNull(column)以确定该值是否为DbNull

答案 3 :(得分:1)

null更改为DBNull.Value

答案 4 :(得分:1)

你也可以这样做:

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

答案 5 :(得分:1)

您可以将从NULL字段检索的对象与DBNull.Value进行比较。

答案 6 :(得分:1)

这是我喜欢的人:

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

例如(原始要求):

queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");

答案 7 :(得分:0)

这是我创建的一种方法,用于读取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);
        }

可以这样使用:

   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,所以要小心。

答案 8 :(得分:0)

    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");