【问题标题】:Error on SQL connection - C#SQL 连接错误 - C#
【发布时间】:2015-12-21 16:02:14
【问题描述】:

我在连接到我的 C# 应用程序上的 SQL 服务器时遇到了一些问题。 我有一个代码可以插入或更新我的数据库表。 如果我更新表,一切正常,但如果我插入它,我会收到错误。

代码如下:

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 ID_Carro=@ID_Carro,Nome=@Nome,Modelo=@Modelo,Combustivel=@Combustivel,Cambio=@Cambio,Portas=@Portas WHERE ID_Carro=@ID_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 ID_Carro=@ID_Carro,ID_Aper=@ID_Aper WHERE ID_Carro=@ID_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 需要打开和 可用的连接。连接的当前状态为关闭

提前致谢

【问题讨论】:

  • 感谢您使用参数化查询。
  • 除了手头的问题,您还需要看看这篇文章。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/… 我建议使用存储过程而不是通过 sql,这有很多原因,包括 AddWithValue 的问题。
  • 作为建议,出于明显的安全原因,请勿在 Internet 的任何地方发布凭据
  • 在执行查询之前,您没有将打开的连接分配给命令。
  • @user2366842 它在 SqlCommand ctor 中传递

标签: c# sql-server ado.net sqlconnection


【解决方案1】:

我遇到了问题,在我的函数 retornaMaiorID() 上,我正在关闭连接。 抱歉打扰了。

谢谢

【讨论】:

  • 编程的好课,共享连接会带来麻烦,所以要小心。
  • 连接类的池化特性为你处理好这个,不要共享连接,使用它们并摆脱它们,在后台会为你处理连接管理。跨度>
猜你喜欢
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多