我正在尝试使用我创建的窗体更新数据库,但是当我执行代码时出错:
未处理的类型' System.InvalidOperationException' 发生在System.Data.dll"在comm.ExecuteNonQuery();
以下是我用来连接数据库的代码。我用来更新数据库的代码是错误的吗?
string conn=ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
SqlConnection connection = new SqlConnection(conn);
SqlCommand comm = new SqlCommand("UPDATE ExerciseInstruction SET Accumulated_Daily_Sets_Completed = '0' WHERE ExerciseInstructionsID ='" + exerciseInstructionID +"'", connection);
comm.ExecuteNonQuery();
以下是完整的错误消息:
ExecuteNonQuery需要一个开放且可用的连接。该 连接的当前状态已关闭。
答案 0 :(得分:3)
错误消息解释全部。如果代码不知道如何到达数据库,则无法执行该命令。只需调用connection.Open
即可解决问题,但我认为您需要使用正确的方法来执行查询。
这称为参数化查询。通过这种方式,您不会将字符串连接在一起以形成查询文本,而是使用参数将值传递给数据库引擎以及包含参数占位符的特殊格式化字符串。
这样做有两个主要优点。使用Sql Injection hacks来定位你的代码是不可能的,你不必处理你的字符串引用(无限的bug来源)
string conn=ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
string cmdText = @"UPDATE ExerciseInstruction
SET Accumulated_Daily_Sets_Completed = 0
WHERE ExerciseInstructionsID =@exid";
using(SqlConnection connection = new SqlConnection(conn))
using(SqlCommand comm = new SqlCommand(cmdText, connection))
{
connection.Open(); // Need this before executing the query
comm.Parameters.Add("@exid", SqlDbType.Int).Value = exerciseInstructionID;
comm.ExecuteNonQuery();
}