我在这一行获得了空参考例外:
cmd.Parameters.Add(" @ gross",DbType.Double).Value = gross_amount;
我已经尝试了一段时间了,但是gross_amount不是NULL仍然让我在Commission_Load_Setup();
检索值
if (purchaseBillTableDataGridView[8, rowindex].Selected == true)
{
quantity = purchaseBillTableDataGridView[8, rowindex].Value.ToString();
}
if (purchaseBillTableDataGridView[9, rowindex].Selected == true)
{
rate = purchaseBillTableDataGridView[9, rowindex].Value.ToString();
}
if (purchaseBillTableDataGridView[10, rowindex].Selected == true)
{
if (string.IsNullOrEmpty(quantity) && string.IsNullOrEmpty(rate))
{
return;
}
else
{
gross_amount = double.Parse(quantity) * double.Parse(rate);
purchaseBillTableDataGridView[10, rowindex].Value = gross_amount;
load_commission_setup();
}
}
这是检索佣金的方法。
string paisa;
private void load_commission_setup()
{
SqlCeConnection conn = null;
SqlCeCommand cmd = null;
SqlCeDataReader rdr = null;
try
{
conn =new SqlCeConnection(@"Data Source=|DataDirectory|\Database.sdf;Persist Security Info=False");
conn.Open();
// int rowindex = purchaseBillTableDataGridView.Rows.Count - 1;
// gross_amount = double.Parse(purchaseBillTableDataGridView[10, rowindex].Value.ToString());
MessageBox.Show(Convert.ToString(gross_amount));
//cmd.Parameters.Add("@gross", gross_amount);
cmd.Parameters.Add("@gross", DbType.Double).Value = gross_amount;
cmd = new SqlCeCommand(@"SELECT Paisa FROM CommissionSetupTable WHERE=@gross BETWEEN FromRate AND ToRate;", conn);
rdr = cmd.ExecuteReader();
if (rdr == null)
{
}
else
{
while (rdr.Read())
{
paisa = rdr["Paisa"].ToString();
}
rdr.Close();
cmd.Dispose();
}
}
finally
{
conn.Close();
int rowindex = purchaseBillTableDataGridView.Rows.Count - 1;
purchaseBillTableDataGridView[11, rowindex].Value = paisa;
}
}
谢谢mohit,现在我只得到这个错误:
答案 0 :(得分:2)
先创建命令
cmd = new SqlCeCommand(@"SELECT Paisa FROM CommissionSetupTable
WHERE=@gross BETWEEN FromRate AND ToRate;", conn);
然后添加参数
cmd.Parameters.Add("@gross", DbType.Double).Value = gross_amount;
否则您尝试将参数添加到null
命令对象
答案 1 :(得分:1)
你应该使用Using
来避免忘记处理资源,特别是当抛出异常时,你可以使用using
语法在你离开using语句的范围时自动调用dispose :
string paisa;
private void load_commission_setup()
{
using (SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\Database.sdf;Persist Security Info=False"))
{
con.Open();
using (SqlCeCommand cmd = new SqlCeCommand(@"SELECT Paisa FROM CommissionSetupTable WHERE FromRate>=@gross AND ToRate<=@gross;", con))
{
cmd.Parameters.Add("@gross", DbType.Double).Value = gross_amount;
using (SqlCeDataReader rdr = cmd.ExecuteReader())
{
try
{
if (rdr != null)
{
while (rdr.Read())
{
paisa = rdr["Paisa"].ToString();
}
}
}
finally
{
conn.Close();
int rowindex = purchaseBillTableDataGridView.Rows.Count - 1;
purchaseBillTableDataGridView[11, rowindex].Value = paisa;
}
}
}
}
}
@Damith说明实际问题是首先创建命令然后添加参数。