2015-12-21 59 views
2

我在連接到我的C#應用​​程序上的SQL服務器時遇到了一些麻煩。 我有一個代碼,可以插入或更新我的數據庫的表。 如果我更新表格,一切都變得越來越重要,但如果我插入它,我會收到錯誤消息。SQL連接錯誤 - C#

下面是代碼:

int ID; 
conn = new SqlConnection(@"Data Source = SERVER\SQLEXPRESS; Initial Catalog = SQLFiat; User ID = sa; Password = secret"); 
conn.Open();    

if (cbCarros.SelectedIndex >= 0) 
{ 
    ID = cbCarros.SelectedIndex + 1; 
    cmd = new SqlCommand("UPDATE Carros SET [email protected]_Carro,[email protected],[email protected],[email protected],[email protected],[email protected] WHERE [email protected]_Carro", conn); 
    cmd.Parameters.AddWithValue("@ID_Carro", ID); 
    cmd.Parameters.AddWithValue("@Nome", tbNome.Text); 
    cmd.Parameters.AddWithValue("@Modelo", tbModelo.Text); 
    cmd.Parameters.AddWithValue("@Combustivel", cbCombustivel.SelectedItem.ToString()); 
    cmd.Parameters.AddWithValue("@Cambio", cbCambio.SelectedItem.ToString()); 
    cmd.Parameters.AddWithValue("@Portas", Int32.Parse(tbPortas.Text)); 
    cmd.ExecuteNonQuery(); 
    cmd.Dispose(); 

    cmd = new SqlCommand("UPDATE Rel_Carro_Apertadeira SET [email protected]_Carro,[email protected]_Aper WHERE [email protected]_Carro", conn); 
    cmd.Parameters.AddWithValue("@ID_Carro", ID); 
    int ID_Aper = cbApertadeiras.SelectedIndex + 1; 
    cmd.Parameters.AddWithValue("@ID_Aper", ID_Aper); 
    cmd.ExecuteNonQuery();     
} 
else 
{ 
    ID = retornaMaiorID() + 1;    
    cmd = new SqlCommand("INSERT INTO Carros (ID_Carro,Nome,Modelo,Combustivel,Cambio,Portas) Values (@ID_Carro,@Nome,@Modelo,@Combustivel,@Cambio,@Portas)", conn); 
    cmd.Parameters.AddWithValue("@ID_Carro", ID); 
    cmd.Parameters.AddWithValue("@Nome", tbNome.Text); 
    cmd.Parameters.AddWithValue("@Modelo", tbModelo.Text); 
    cmd.Parameters.AddWithValue("@Combustivel", cbCombustivel.SelectedItem.ToString()); 
    cmd.Parameters.AddWithValue("@Cambio", cbCambio.SelectedItem.ToString()); 
    cmd.Parameters.AddWithValue("@Portas", Int32.Parse(tbPortas.Text)); 
    cmd.ExecuteNonQuery(); 
    cmd.Dispose(); 

    cmd = new SqlCommand("INSERT INTO Rel_Carro_Apertadeira (ID_Carro,ID_Aper) Values (@ID_Carro,@ID_Aper)", conn); 
    cmd.Parameters.AddWithValue("@ID_Carro", ID); 
    int ID_Aper = cbApertadeiras.SelectedIndex + 1; 
    cmd.Parameters.AddWithValue("@ID_Aper", ID_Aper); 
    cmd.ExecuteNonQuery(); 
} 

錯誤是:

'System.InvalidOperationException' 類型 的未處理的異常出現在system.data.dll的ExecuteNonQuery需要一個開放和 可用的連接。連接的當前狀態爲關閉

在此先感謝

+0

感謝您使用參數化查詢。 – ChaosPandion

+0

除了手頭的問題,你需要看這篇文章。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/我會建議使用存儲過程,而不是通過SQL,這是更好的一些包括AddWithValue問題在內的原因。 –

+1

作爲建議,不要在Internet的任何地方張貼證書,因爲明顯的安全原因 – Rober

回答

1

我有問題,我的功能retornaMaiorID()我是關閉連接。 對不起打擾你。

謝謝

+0

在編程,共享連接方面的一個很好的教訓可能會導致麻煩,所以要小心。 – ChaosPandion

+0

好的,謝謝! –

+0

連接類的池化功能爲您處理此問題,不共享連接,使用它們並擺脫它們,幕後會爲您負責連接管理。 –