2

我正在尝试使用以下代码绑定 GridView 控件。但我收到错误“数据为 Null。无法在 Null 值上调用此方法或属性。” 错误行是“ p.MaterialName = reader.GetString(reader.GetOrdinal("MaterialName"));” 我在材料表的所有字段中都有数据。代码有什么问题?请帮我修复它。

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;
}
4

1 回答 1

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"))
于 2013-08-10T10:33:57.307 回答