2012-05-27 38 views
0

当我尝试通过我创建的软件将一些数据保存到我的sql(express)时,出现此错误。C#“InvalidOperationException:ExecuteNonQuery”异常

在System.Data.dll中发生未处理的异常类型'System.InvalidOperationException'。 附加信息:ExecuteNonQuery:连接属性尚未初始化。

下面是我的代码:

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(); 

     } 
    } 
} 
+1

为什么发布代码截图?它根本不可读。请改为发布代码。 – Adam

+0

完成我添加的代码。 – dbexec

回答

0

你有一个类变量cnrMedecine_reg_load一个局部变量cn。这看起来不正确。

错误仅仅意味着您在分配连接之前尝试使用cmd

+0

好吧,我发现我不得不做的..现在我有另一个错误 在System.Data.dll中发生未处理的类型'System.Data.SqlClient.SqlException异常' 其他信息:转换日期转换失败和/或字符串的时间。 – dbexec

+0

事实上,你应该使用cmd = cn.CreateCommand()或cmd = new SqlCommand(cn)(我认为它的语法是) –

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”值没有一个。文本attatched给他们。我不知道这些值来自哪里,但如果它们是文本框,则可能需要添加.Text。如果它们是,并且你试图将它们插入到你的数据库中,你会得到一个错误,因为你不能在数据库中插入一些类型为“Textbox”的东西。

+0

来初始化cmd,它们在我的分区中是int的,如果我添加.text它会刹车。所以我试图找到我最终必须添加的内容。 – dbexec

+0

尝试Convert.ToInt32(amountBox.Text),它应该将它们解析为整数。 dateTimepicker,是一个jQuery的时间选择器?因为你将不得不解析,然后 – Thousand

+0

好吧,我已经完成了你告诉我的方式我添加到所有int @ myDB convert.ToInt32和我的小数@ myDB convert.ToDouble **但是**我现在有这个错误.. _附加信息:算术溢出错误转换varchar到数据类型numeric._ BUt我所有的nvarchar文本框就像这样textbox.text ... – dbexec

0

首先:使用参数。你可以阅读关于他们here

另一件事是这一行:

cmd.Clone(); 

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

您还应该清理2个连接的混乱,如其他答案中所述。