【问题标题】:Populate DataGrid using SqlDataReader with null使用带有 null 的 SqlDataReader 填充 DataGrid
【发布时间】:2017-06-02 09:36:58
【问题描述】:
我使用 SqlDataReader 在 while 循环中将数据库行写入 DataGrid(由于内存问题而不是绑定 SqlDataReader 或 DataTable),但在 SqlDataReader 时收到 null 异常命中一个空字段。我试过 ?? 运算符,它不起作用。除了检查 if-else 语句中的每个返回值,还有更简单或更优雅的方法吗?
while (sqlDataReader.Read())
{
myDataGrid.Items.Add(new DataItem
{
Column01 = rdr.GetInt32(0) ?? "EMPTY",
});
}
【问题讨论】:
标签:
c#
wpf
datagrid
sqldatareader
【解决方案1】:
在列上调用IsDBNull 将允许您检查空值:
Column01 = rdr.IsDBNull(0) ? "EMPTY" : rdr.GetInt32(0).ToString();
【解决方案2】:
这是一个解决方案,实现为可重用的方法扩展
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 情况下应该出现哪个值。