SQL Query Paremeters Add提供空引用异常

时间:2016-12-07 09:16:13

标签: c# mysql

我在这一行获得了空参考例外:

  

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,现在我只得到这个错误:

enter image description here

2 个答案:

答案 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说明实际问题是首先创建命令然后添加参数。