如何从数据库中检索十进制值并将其存储在变量中并在if语句中使用它?

时间:2015-03-12 19:04:10

标签: c# asp.net sql-server

我在Sql server中有一个存储过程。此sp返回一个数据集(包含49列)。有一栏" Product_Amnt"在具有十进制值的数据集中。

我正在尝试使用c#。

在asp.net应用程序中检索此列数据
DataTable dt = new DataTable();
try
{
    SqlCommand com = new SqlCommand("sp_ProductDetails");
    com.CommandType = CommandType.StoredProcedure;
    com.Connection = con;
    com.Parameters.Add("@ID", SqlDbType.Int).Value = this._ID;
    SqlDataAdapter da = new SqlDataAdapter(com);
    da.Fill(dt);
}
catch (Exception ex) { new Error(ex); }
return dt;

我想使用" Product_Amnt"列根据条件显示产品。

decimal pr_charges = Convert.ToDecimal(dr["Product_Amnt"]);

但它给出了一个错误,说"对象不能从dbnull转换为其他类型"。所以我修改了这样的代码,

 decimal pr_charges = dr["Product_Amnt"] == DBNull.Value ? 0 : Convert.ToDecimal(dr["Product_Amnt"]);
if (pr_charges == 0.00M)
   {
      counter++;
   }

但它总是在pr_charges变量中给出值0。

如何从数据库中检索十进制值并将其存储在变量中?

1 个答案:

答案 0 :(得分:1)

在您编写的基础上,可以假设Product_Amnt列可以为空。在这种情况下,最好将pr_charges变量声明为可空小数。 decimal? pr_charges

你可以使用not nullable只是把Null的insted一些默认值,实际上你试着这样做但是再次看起来值反之亦然

decimal pr_charges = dr["Product_Amnt"] == DBNull.Value ? 0 : Convert.ToDecimal(dr["Product_Amnt"]);

请同时查看enter link description here

enter link description here