访问更新语句在 C# 中不起作用
Posted
技术标签:
【中文标题】访问更新语句在 C# 中不起作用【英文标题】:Access update statement not working in C# 【发布时间】:2016-12-20 07:33:32 【问题描述】:我正在疯狂地试图找出以下代码不会更新我的数据库的原因。感谢您的帮助。 连接字符串是正确的,我可以执行类似的命令,只是这个由于某种原因不起作用。基本上我想要的是在我传递给该方法的列中将值“1”替换为“123”。
public void removeExpired2(string column, string user)
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\DB.accdb";
using (OleDbConnection conn = new OleDbConnection(connectionString))
OleDbCommand cmd = new OleDbCommand("UPDATE [Reservations] SET [" + column + "] = @Column WHERE [" + column + "] = @ID");
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
cmd.Parameters.AddWithValue("@Column", "123");
cmd.Parameters.AddWithValue("@ID", "1");
try
conn.Open();
cmd.ExecuteNonQuery();
catch (Exception ex)
ScriptManager.RegisterClientScriptBlock(Button1, this.GetType(), "AlertMsg", "<script language='javascript'>alert('" + ex.Message.ToString() + "');</script>", false);
【问题讨论】:
但是您将123
替换为 1
我在更改此处的值以便更容易解释时犯了这个错误,但在我的代码中问题仍然存在。除了相反的值之外,语句本身有什么问题吗?
你检查cmd.ExecuteNonQuery()
的返回值了吗?
【参考方案1】:
基本上我想要的是将出现的值“1”替换为“123”
您的查询正好相反。
改一下
"UPDATE [Reservations] SET [" + column + "] = @Column WHERE [" + column + "] = @ID"
到
"UPDATE [Reservations] SET [" + column + "] = @ID WHERE [" + column + "] = @Column"
或
这样做:
cmd.Parameters.AddWithValue("@Column", "123");
cmd.Parameters.AddWithValue("@ID", "1");
【讨论】:
我在更改此处的值以便更容易解释时犯了这个错误,但在我的代码中问题仍然存在。除了相反的值之外,语句本身有什么问题吗?【参考方案2】:该命令与其他两个命令一起执行,因此我尝试将它们分开,它似乎已经解决了问题。 我将一个命令移到它自己的方法中,剩下的两个和以前一样,现在它正在工作。谢谢大家。
【讨论】:
【参考方案3】:简短的回答是,参数必须按照它们在 SQL 语句中出现的顺序添加到命令对象中。
【讨论】:
那不是真的...... Access 不使用命名参数,而是使用位置参数。所以在这种情况下,顺序很重要 没错,这就是我在上面的回答中提到的。我创建了一个正则表达式,它从 SQL 语句中提取命令参数并在循环中将它们添加到命令对象中。以上是关于访问更新语句在 C# 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
WHERE 语句在应该更新数据的 SQL 中不起作用[关闭]
使用点运算符访问字典时条件语句在 Django 模板中不起作用