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

时间:2015-04-26 03:37:58

标签: c# database ms-access syntax-error insert-update

首先,我知道密码是一种保留类型的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();
}

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

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

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

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