OLEDB的SQL更新语句错误

时间:2014-05-15 03:06:24

标签: c# sql ado.net oledbconnection

错误是“UPDATE语句中的语法错误”

string id = lblUserID.Text;
DB_Connection.con.Open();
string sql = "UPDATE TblUser SET LastName = @LastName,FirstName = @FirstName,MI = @MI,UserLevel = @UserLevel,Username = @Username,Password = @Password WHERE UserID = '" + id + "'";
DB_Connection.command = new OleDbCommand(sql, DB_Connection.con);

DB_Connection.command.Parameters.AddWithValue("@LastName", txtLastName.Text);
DB_Connection.command.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
DB_Connection.command.Parameters.AddWithValue("@MI", txtMI.Text);
DB_Connection.command.Parameters.AddWithValue("@UserLevel", cmbUserLevel.Text);
DB_Connection.command.Parameters.AddWithValue("@Username", txtUsername.Text);
DB_Connection.command.Parameters.AddWithValue("@Password", txtPassword.Text);
DB_Connection.command.ExecuteNonQuery();
DB_Connection.con.Close();

2 个答案:

答案 0 :(得分:2)

很可能UserID是您表格中的数字,但是您已经将值包围的撇号意味着您正在尝试将字符串文字分配给数字列。

也参数化用户ID:

string sql = "UPDATE TblUser SET ..... WHERE UserID = @UserId";

...

var userId = int.Parse(lblUserID.Text);  // will throw exception if not a number
DB_Connection.command.Parameters.AddWithValue("@UserId", userId);

...
...

无关,但另一个观察。不要使用任何类级结构DB_Connection,而是考虑使用using语句并在需要时在本地创建连接和命令。

using语句会关闭连接,因此您无需明确调用Close()(如果您的方法中出现异常,则顺便提一下,这样就不会运行)

答案 1 :(得分:0)

查询中的语法错误。显然似乎有以下原因:

  1. 您可能正在使用userID的单引号。假设userID在数据库中是整数,那么你必须删除单引号。

  2. 另一种可能性,可能是您缺少在数据库表列名称周围添加括号。这与SQL中保留字的名称相匹配。

  3. 示例:

    [Password] = @Password 
    

    请参阅此link以了解为什么方括号有用,尽管不是强制性的。

    以下是Microsoft OLE DB Provider的list of reserved words