为什么我在尝试更新数据库时遇到此错误?
ExecuteNonQuery需要一个开放且可用的连接。连接的当前状态已关闭
以下是代码:
cmd1 = new SqlCommand("UPDATE [guitarBrands] SET type = @type, name = @name, image = @image WHERE id = @id", con1);
con1.Open();
cmd1.Parameters.Add(new SqlParameter("type", newType.Text));
cmd1.Parameters.Add(new SqlParameter("name", newName.Text));
cmd1.Parameters.Add(new SqlParameter("image", newImage.Text));
cmd1.Parameters.Add(new SqlParameter("id", id));
cmd1.ExecuteNonQuery();
con1.Close();
cmd1.Parameters.Clear();
cmd = new SqlCommand("UPDATE [guitarItems] SET brand = @brand WHERE id = @id", con1);
con.Open();
cmd.Parameters.Add(new SqlParameter("brand", newName.Text));
cmd.Parameters.Add(new SqlParameter("id", id));
cmd.ExecuteNonQuery();
con.Close();
cmd.Parameters.Clear();
答案 0 :(得分:3)
为避免出现这类问题,建议您使用电源塔。
using(var connection = new SqlConnection(dbConnection))
{
connection.Open();
using(var command = new SqlCommand(query, connection)
{
}
using(var command = new SqlCommand(query, connection)
{
}
}
所以权力塔的美丽,使用块将在给定的代码块内实现。因此,这将清楚地表明,这两个命令都使用了与使用相同的连接。此外,一旦代码超出范围,它将实现IDispose
,它将调用垃圾收集器来释放资源。
另外,你应该选择。 SqlCommand
接受参数数组。因此,如果您使用方法调用,则可以执行以下操作:
public static GetExample(string query, params SqlParameter[] parameters)
{
using(var connection = new SqlConnection("YourDbConnection"))
using(var command = new SqlCommand("YourQuery", connection))
{
connection.Open();
if(parameters != null)
if(parameters.Any())
command.Parameters.Add(parameters);
command.ExecuteNonQuery();
}
}
我不记得该集合是添加,添加范围还是连续。但无论哪种方式存在选择。
答案 1 :(得分:0)
cmd = new SqlCommand("UPDATE [guitarItems] SET brand = @brand WHERE id = @id", con1);
将此行替换为此
cmd = new SqlCommand("UPDATE [guitarItems] SET brand = @brand WHERE id = @id", con);
答案 2 :(得分:0)
在您的代码中,您在命令“cmd1”和“cmd”中使用Connexion“con1”。对两个命令只使用一个连接是可以的,但是你应该将连接打开,直到两个命令都被执行。 在您的情况下,您选择为第二个命令使用新的连接“con”,但是您重新打开“con1”。 因此,您会收到错误,因为“con”永远不会打开。