更新到语句中的访问数据库语法错误

Posted

技术标签:

【中文标题】更新到语句中的访问数据库语法错误【英文标题】:Access database syntax error in update into statement 【发布时间】:2015-04-26 03:37:58 【问题描述】:

首先我知道密码是Access数据库的一种保留类型。但我读过一篇文章,你可以这样输入[密码],它会起作用。但它不起作用。我已经尝试了很多方法,但我仍然希望有人能提供帮助。

OleDbCommand cmd = new OleDbCommand();

try

    String query = "update [Employe] set [UserName] ='" + txtNewUser.Text +"', [Password] ='"+ txtNewPass.Text + "', [Authorization] ='" + nudAuthorizationLvl.Value + "', where [Id] = '" + int.Parse(txtExistingId.Text);
    cmd.CommandText = query;
    cmd.Connection = conn;
    conn.Open();

    cmd.ExecuteNonQuery();
    System.Windows.Forms.MessageBox.Show("Info Updated!!!");

    conn.Close();

catch (Exception ex)

    MessageBox.Show("Error" + ex);

finally

    conn.Close();

【问题讨论】:

使用Parameters,否则您可能会成为 SQL 注入攻击的受害者。什么不正确?有任何异常或错误消息吗? 如上所述,您应该真正将其更改为使用参数。另外,我相信您在“where”子句之前有一个额外的逗号,可能会导致语法错误 【参考方案1】:

我相信您在 where 子句之前有一个额外的逗号,在 ID 之前有一个额外的引号。

另外,请始终使用参数,以避免 Sql Injection 攻击:

conn.Open();
cmd.CommandText = "update [Employe] set [UserName] =@userName, [Password] =@password, [Authorization] =@authorization where [Id] = @id";
cmd.Connection = conn;
cmd.Parameters.AddRange(new OleDbParameter[]
       
           new OleDbParameter("@userName", txtNewUser.Text),
           new OleDbParameter("@password", txtNewPass.Text),
           new OleDbParameter("@authorization", nudAuthorizationLvl.Value),
           new OleDbParameter("@id", int.Parse(txtExistingId.Text))
       );
cmd.ExecuteNonQuery();

【讨论】:

不认为可以通过参数给出命令文本。谢谢你真的帮助了你,让我度过了一个美好的夜晚。并感谢您的提示。我会尝试用参数改变我的结构体。 很高兴为您提供帮助 :) 是的,始终使用参数,否则您将很容易被黑客攻击【参考方案2】:

我认为您的更新查询中存在语法错误。考虑到您的 ID 字段是 INT 类型,实际值之前不应有任何 '。因此,您应该将查询更改为以下内容:

String query = "update [Employe] set [UserName] ='" + txtNewUser.Text +"', [Password] ='"+ txtNewPass.Text + "', [Authorization] ='" + nudAuthorizationLvl.Value + "', where [Id] = " + int.Parse(txtExistingId.Text);

话虽如此,您确实应该使用parameterized query 来传递参数。

【讨论】:

非常感谢,我会检查一下。

以上是关于更新到语句中的访问数据库语法错误的主要内容,如果未能解决你的问题,请参考以下文章

针对Access数据库的Update语句中的语法错误(使用OleDbCommandBuilder)

在 Access 数据库中更新密码时 UPDATE 语句中的语法错误

更新时更新语句中的语法错误

更新语句中的 VB.NET 语法错误

SQLSTATE [42000]:语法错误或访问冲突:sql select 语句中的 1064

System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。 '