C# Datareader中的句柄NULL

C# Datareader中的句柄NULL,c#,sql,sqldatareader,datareader,C#,Sql,Sqldatareader,Datareader,这是我用来通过DataReader从sql读取数据的代码。当表中有空值时,它会给出错误。如何处理 我试过了 c.ActualWeight= dr[0] as float? ?? default(float); 问题是它成功地处理了null,但结果始终为0,即使sql数据库在该字段中的值为1 { List<Inventory_Connector> LC = new List<Inventory_Connector>(); string ConString

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

我试过了

c.ActualWeight= dr[0] as float? ?? default(float);
问题是它成功地处理了null,但结果始终为0,即使sql数据库在该字段中的值为1

{ 
    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;
使用DBNull.Value检查空值

使用DBNull.Value检查空值。

您可以使用检查数据读取器中的空值。C null和DBNull是不同的

 c.ActualWeight = 
     dr.IsDBNull(0) 
     ? default(float) 
     : float.Parse(dr[0].ToString().Trim());
可以使用检查数据读取器中的空值。C null和DBNull是不同的

 c.ActualWeight = 
     dr.IsDBNull(0) 
     ? default(float) 
     : float.Parse(dr[0].ToString().Trim());
你可以试试这个

if (dr.IsDBNull(0))
   c.ActualWeight = default(float);
else
   c.ActualWeight = float.Parse(dr[0].ToString().Trim());
你可以试试这个

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

什么类型的Inventory_Connector的第一列?只是一个注释,您选择了前17行,并将每行的值放入c.ActualWeight,然后将c添加到列表中并重新初始化。这意味着您的实际重量将只是数据库中最后一次输入的重量。另外,不要忘记调用con、cmd和dr的Dispose方法。或者更好的方法是,使用using语句。什么类型的Inventory_Connector的第一列?只需一条注释,您将选择前17行,并将每行的值放入c.ActualWeight中,在将c添加到列表并重新初始化之前。这意味着您的实际重量将只是数据库中的最后一个输入值。另外,不要忘记调用con、cmd和dr的Dispose方法。或者更好的方法是使用using语句。您不需要GetOrdinal,IsDBNull接受序号position@DaveShaw是吗?我很少使用它,我记得很久以前就需要它了。我会编辑我的答案,谢谢!您不需要GetOrdinal,IsDBNull接受一个序号position@DaveShaw是吗?我很少使用它,我记得很久以前就需要它了。我会编辑我的答案,谢谢!