我有以下代码,不会更新记录。有问题的数据显示在DataGridView中,所以我知道我连接到数据库没有问题。如果有人看到任何错误,他们可以让我知道,我已经看了很长一段时间,我看不到任何看起来不正确的事情。没有异常抛出它,什么都不做。提前谢谢。
string strSQLConnectionString = "Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\dbase.mdf;Integrated Security=True";
string strUpdateCommand = "UPDATE table1 SET Active = @Active WHERE Order = @Order";
SqlConnection connection = new SqlConnection(strSQLConnectionString);
SqlCommand updateCommand = new SqlCommand(strUpdateCommand, connection);
connection.Open();
updateCommand.Parameters.AddWithValue("Order", "1");
updateCommand.Parameters.AddWithValue("@Active", "True");
updateCommand.ExecuteNonQuery();
connection.Close();
updateCommand.Parameters.Clear();
在实际代码中,有一个try / catch以connection.open开头,以parameters.clear结束。 再次感谢您对此的任何帮助。 埃里克
EDIT @Rahul Singh感谢您的回复以及博客的链接。您添加缺少的“@”时建议的更改无法解决问题。相反,我现在得到的是执行查询行上的“连接未打开,连接必须打开”异常。我接受了关于使用块的建议(谢谢!),修改后的代码是
using (SqlConnection connection = new SqlConnection(strSQLConnectionString))
{
using (SqlCommand updateCommand = new SqlCommand(strUpdateCommand, connection))
{
updateCommand.Parameters.AddWithValue("@Order", "1");
updateCommand.Parameters.AddWithValue("@Active", "True");
updateCommand.ExecuteNonQuery();
}
}
奇怪的是,如果我明确说'connection.open()'和'connection.close();'然后我没有得到这个错误,但是,再一次,没有做任何事情。感谢您对此有任何进一步的帮助,我即将在我的头皮上擦一个洞,因为这个头上的所有头部都在刮擦。
答案 0 :(得分:2)
因为您在以下行中缺少@
: -
updateCommand.Parameters.AddWithValue("@Order", "1");
参数应与查询完全匹配。另外,请在#34上阅读此blog;我们可以停止使用AddWithValue"。
此外,您应该使用using
块进行编码,以自动处理昂贵的资源。这样的事情: -
using(SqlConnection connection = new SqlConnection(strSQLConnectionString)
{
using(SqlCommand updateCommand = new SqlCommand(strUpdateCommand, connection)
{
//Your code goes here.
}
}