我从表中获取一行,此行的某些字段为null
。如何使用SqlDataReader
获取这些字段?
//so_type , so_read are null able
while (reader.Read())
{
s.id = (Int64)reader["so_id"];
s.senderid = (Int64)reader["so_senderid"];
s.body = (string)reader["so_body"];
s.date = (string)reader["so_date"];
s.isread = (bool)reader["so_read"];
s.type = (int)reader["so_type"];
}
答案 0 :(得分:2)
您可以利用C#泛型编写一个帮助方法,该方法可以为每个可以null
的列提取值或默认值。
private static T GetValue<T>(object value)
{
return value == DBNull.Value ? default(T) : (T) value;
}
while (reader.Read())
{
s.id = GetValue<long>(reader["so_id"]);
s.senderid = GetValue<long>(reader["so_senderid"]);
s.body = GetValue<string>(reader["so_body"]);
s.date = GetValue<string>(reader["so_date"]);
s.isread = GetValue<bool>(reader["so_read"]);
s.type = GetValue<int>(reader["so_type"]);
}
这也假定值已经是正确的类型。
更安全的实现方式是:
private static T GetValue<T>(object value)
{
return value == DBNull.Value
? default(T)
: (T) Convert.ChangeType(value, typeof(T));
}
答案 1 :(得分:1)
您可以使用IsDBNull method。这样的事情:
int ordinal_so_type=reader.GetOrdinal("so_type");
//...
while(reader.Read()==true)
{
//reading other columns here
if (reader.IsDBNull(ordinal_so_type)==false)
{
s.type=reader.GetInt32(ordinal_so_type);
}
else
{
//do whatever you like if the so_type column is null
}
}