我在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。
如何从数据库中检索十进制值并将其存储在变量中?
答案 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"]);