使用带有 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 情况下应出现哪个值。