2015-12-21 69 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

连接类的池化功能为您处理此问题,不共享连接,使用它们并摆脱它们,幕后会为您负责连接管理。 –