2012-05-27 42 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個連接的混亂,如其他答案中所述。