【问题标题】:Handle NULL in Datareader在 Datareader 中处理 NULL
【发布时间】:2014-04-30 20:42:11
【问题描述】:

这是我用来通过 DataReader 从 sql 读取数据的代码。当表中有 NULL 时,它会给出错误。如何处理?

我试过了

c.ActualWeight= dr[0] as float? ?? default(float);

这样做的问题是它在处理 NULL 方面是成功的,但即使 sql 数据库在该字段中的值为 1,结果也始终为 0。

{ 
    List<Inventory_Connector> LC = new List<Inventory_Connector>();
    string ConString = "data source=DELL\\SQLSERVER1;Initial Catalog=Camo;Integrated Security=True";
    SqlConnection con = new SqlConnection(ConString);
    SqlCommand cmd = new SqlCommand("Select Top 17 * from Inventory_Connector", con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();

    while (dr.Read())
    {
        c.ActualWeight = float.Parse(dr[0].ToString().Trim());
    }

    LC.Add(c);
}

dr.Close();
con.Close();
return LC;

【问题讨论】:

  • 第一列Inventory_Connector是什么类型?
  • 只是一个注释,您选择前 17 行,并将每行的值放入 c.ActualWeight,然后将 c 添加到列表并重新初始化它。这意味着您的实际体重只会是您数据库中最后一次输入的体重。
  • 另外不要忘记为concmddr 调用Dispose 方法。或者更好的是,使用using 语句。

标签: c# sql sqldatareader datareader


【解决方案1】:

您可以使用SqlDataReader.IsDBNull 从数据读取器中检查空值。 C# nullDBNull 是不同的。

 c.ActualWeight = 
     dr.IsDBNull(0) 
     ? default(float) 
     : float.Parse(dr[0].ToString().Trim());

【讨论】:

    【解决方案2】:

    你可以试试这个

    if (dr.IsDBNull(0))
       c.ActualWeight = default(float);
    else
       c.ActualWeight = float.Parse(dr[0].ToString().Trim());
    

    【讨论】:

    • 你不需要GetOrdinal,IsDBNull取一个Ordinal位置
    • @DaveShaw 是吗?我很少使用它,我记得需要它回来。我会编辑我的答案,谢谢!
    【解决方案3】:
    c.ActualWeight = (dr[0] != DBNull.Value) ? float.Parse(dr[0].ToString().Trim()) 
                                             : default(float)
    

    使用DBNull.Value 检查空值。

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 2014-06-19
      • 2017-02-08
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多