C#“InvalidOperationException:ExecuteNonQuery”异常

时间:2012-05-27 11:08:39

标签: c# sql-server-express invalidoperationexception

当我尝试通过我创建的软件将一些数据保存到我的sql(express)时出现此错误。

  

System.Data.dll中发生了未处理的“System.InvalidOperationException”类型异常。   附加信息:ExecuteNonQuery:尚未初始化Connection属性。

这是我的代码:

    private void save_medicine_Click(object sender, EventArgs e)
    {
        cn.Open();

        if (nameBox.Text != "" & companyBox.Text != "" & categoryBox.Text != "" & 
           amountBox.Text != "" & restockBox.Text != "" & buyBox.Text != "" & 
           sellBox.Text != "" & qualityComboBox.Text !=""  )
        {
            cmd.CommandText = "insert into drug_info (name,company_id,category,
                               expiration_date,stock_level,
                               critical_level_drug,cost_buy,cost_sell,drug_quality) 
                               values ('"+nameBox.Text+"','"+companyBox.Text+"','"+
                               categoryBox.Text+"','"+dateTimePicker1+"','"+amountBox+"','"
                                +restockBox+"','"+buyBox+"','"+sellBox+"','"
                                +qualityComboBox+"')";
            cmd.ExecuteNonQuery();
            cmd.Clone();

        }
    }
}

3 个答案:

答案 0 :(得分:0)

cn中有一个类变量cn和一个局部变量rMedecine_reg_load。这似乎不对。

错误只是意味着您在为其分配连接之前尝试使用cmd

答案 1 :(得分:0)

尝试这样

     if (nameBox.Text != "" & companyBox.Text != "" & categoryBox.Text != "" &  amountBox.Text != "" & restockBox.Text != "" & buyBox.Text != "" & sellBox.Text != "" & qualityComboBox.Text !=""  )
    {

        string sql = "insert into drug_info (name,company_id,category,expiration_date,stock_level,critical_level_drug,cost_buy,cost_sell,drug_quality) values ('"+nameBox.Text+"','"+companyBox.Text+"','"+categoryBox.Text+"','"+dateTimePicker1+"','"+amountBox+"','"+restockBox+"','"+buyBox+"','"+sellBox+"','"+qualityComboBox+"')";
        SqlCommand cmd = new SqlCommand(sql,cn);
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
        MessageBox.Show("Τα στοιχεία καταχωρήθηκαν στη Βάση");
    }

这应该可行..虽然我不知道为什么像“amountBox”和“buyBox”这样的值没有.Text附加到他们身上。我不知道这些值来自哪里,但如果它们是文本框,您可能需要添加.Text。如果它们是,并且您尝试将它们插入到数据库中,那么您将收到错误,因为您无法在数据库中插入具有“Textbox”类型的内容。

答案 2 :(得分:0)

首先:使用参数。你可以阅读它们here

另一件事是这一行:

cmd.Clone();

我打赌你想要关闭命令。但是没有办法关闭SqlCommand。只需删除该行。

你还应该用其他答案中提到的2个连接清理乱七八糟的东西。