使用带有 null 的 SqlDataReader 填充 DataGrid
Populate DataGrid using SqlDataReader with null
我在 while 循环中使用 SqlDataReader 将数据库行写入 DataGrid(而不是由于内存问题而绑定 SqlDataReader 或 DataTable ), 但当 SqlDataReader 命中空字段时收到空异常。我曾尝试过 ??
运算符,但它不起作用。有没有更简单或更优雅的方法来代替检查 if-else 语句中的每个 return 值?
while (sqlDataReader.Read())
{
myDataGrid.Items.Add(new DataItem
{
Column01 = rdr.GetInt32(0) ?? "EMPTY",
});
}
对该列调用 IsDBNull 将允许您检查空值:
Column01 = rdr.IsDBNull(0) ? "EMPTY" : rdr.GetInt32(0).ToString();
这是一个解决方案,实现为可重用的方法扩展
public static Int32 GetInt32(this IDataRecord dr, int index, Int32 @default)
{
object obj = dr[index];
if (null == obj || obj is DBNull) return @default;
return dr.GetInt32(index);
//return Convert.ToInt32(obj);//alternatively
}
理想情况下,您可以为所有相关类型制作自己的方法扩展。 @default 可用于指定在 NULL 情况下应出现哪个值。
我在 while 循环中使用 SqlDataReader 将数据库行写入 DataGrid(而不是由于内存问题而绑定 SqlDataReader 或 DataTable ), 但当 SqlDataReader 命中空字段时收到空异常。我曾尝试过 ??
运算符,但它不起作用。有没有更简单或更优雅的方法来代替检查 if-else 语句中的每个 return 值?
while (sqlDataReader.Read())
{
myDataGrid.Items.Add(new DataItem
{
Column01 = rdr.GetInt32(0) ?? "EMPTY",
});
}
对该列调用 IsDBNull 将允许您检查空值:
Column01 = rdr.IsDBNull(0) ? "EMPTY" : rdr.GetInt32(0).ToString();
这是一个解决方案,实现为可重用的方法扩展
public static Int32 GetInt32(this IDataRecord dr, int index, Int32 @default)
{
object obj = dr[index];
if (null == obj || obj is DBNull) return @default;
return dr.GetInt32(index);
//return Convert.ToInt32(obj);//alternatively
}
理想情况下,您可以为所有相关类型制作自己的方法扩展。 @default 可用于指定在 NULL 情况下应出现哪个值。