我尝试读取查询结果并发现某些列是否为空 这是我开始的一种方式:
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
rdr["ColumnName"]; // how do I know if it has a value or empty
}
我想:
dr[4].ToString() == String.Empty
它需要工作,但我不喜欢这个(这是一个黑客而不是解决方案) 你能告诉我如何正确而优雅地做到这一点吗?
答案 0 :(得分:3)
int值不存在空,使用数据库时正确的是使用 Null ,这是唯一真正的"空"。
SqlDataReader rdr = cmd.ExecuteReader();
int colIndex = read.GetOrdinal("MyColumnName");
while (rdr.Read())
{
// [true | false] your validation goes here!;
if (rdr.IsDBNull(colIndex)){
//value is null
}
}
请注意,如果你想使用0,""或1/1/1900为空值,需要定制处理。
答案 1 :(得分:1)
我就是这样做的
string UserInitialssql = rdr.IsDBNull(2) ? String.Empty : rdr.GetString(2);
如果是Int
Int32? i = rdr.IsDBNull(2) ? (Int32?)null : rdr2.GetInt32(2);
答案 2 :(得分:0)
另一种可能性是使用可空类型。 e.g:
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
int? someNumber = rdr["ColumnName"] as int?;
if (someNumber == null)
// was NULL in database
else
// use someNumber.Value to get int
}