我正在尝试使用以下代码绑定GridView控件。但是我收到错误“Data is Null。无法在Null值上调用此方法或属性。”错误行是“p.MaterialName = reader.GetString(reader.GetOrdinal(”MaterialName“));”我在Materials表的所有字段中都有数据。代码有什么问题?请帮我解决。
public static List<Product> GetMaterials()
{
SqlHelper objSqlHelper = new SqlHelper();
SqlDataReader reader = objSqlHelper.ExecuteReader("GetMaterials");
List<Product> objMaterials = new List<Product>();
Product p = new Product();
while (reader.Read())
{
p.MaterialId = reader.GetInt32(reader.GetOrdinal("MaterialId"));
p.MaterialName = reader.GetString(reader.GetOrdinal("MaterialName"));
p.desc = reader.GetString(reader.GetOrdinal("desc"));
p.MaterialPrice = reader.GetDecimal(reader.GetOrdinal("MaterialPrice"));
p.Datasheet = reader.GetString(reader.GetOrdinal("Datasheet"));
objMaterials.Add(p);
}
reader.Close();
return objMaterials;
}
答案 0 :(得分:0)
我知道你说应该有数据,但这通常是在缺少数据时抛出。
尝试检查数据库中“MaterialName”是否为空:
p.MaterialName = reader.IsDBNull("MaterialName")
? null : reader.GetString(reader.GetOrdinal("MaterialName"))
如果这样可行,但是你在另一行上得到了错误,你可能还要检查这些行上的空值。
对于“MaterialPrice”字段,请使用以下内容:(如果p.MaterialPrice
不可为空,请将(decimal)null
替换为某些默认值,例如0
)
p.MaterialPrice
= reader.IsDBNull("MaterialPrice")
? (decimal)null : reader.GetDecimal(reader.GetOrdinal("MaterialPrice"))