update into 语句中访问数据库语法错误
Access database syntax error in update into statement
首先我知道密码是Access数据库的一种保留类型。但我读过一篇 post,你可以像那样输入 [password],它会起作用。但它不起作用。尝试了很多方法,还是希望有人能帮到你。
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();
}
我相信您在 where
子句之前有一个额外的逗号,在 ID 之前有一个额外的引号。
此外,始终使用参数,以避免 Sql 注入攻击:
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();
我认为您的更新查询中存在语法错误。考虑到您的 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数据库的一种保留类型。但我读过一篇 post,你可以像那样输入 [password],它会起作用。但它不起作用。尝试了很多方法,还是希望有人能帮到你。
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();
}
我相信您在 where
子句之前有一个额外的逗号,在 ID 之前有一个额外的引号。
此外,始终使用参数,以避免 Sql 注入攻击:
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();
我认为您的更新查询中存在语法错误。考虑到您的 ID 字段是 INT 类型,因此实际值之前不应有任何 '。因此,您应该将查询更改为以下内容:
String query = "update [Employe] set [UserName] ='" + txtNewUser.Text +"', [Password] ='"+ txtNewPass.Text + "', [Authorization] ='" + nudAuthorizationLvl.Value + "', where [Id] = " + int.Parse(txtExistingId.Text);
话虽这么说,你真的应该使用 parameterized query 来传递参数。