为什么我会收到 "Syntax error in UPDATE statement." 异常?
Why am I getting a "Syntax error in UPDATE statement." exception?
public void EditUser(string id, string userid, string email, string password)
{
try
{
_dbConn.Open();
OleDbCommand updateCmd = new OleDbCommand("UPDATE LOGINS SET Username=?, Password=?, Email=? WHERE ID=?", _dbConn);
OleDbParameter param1 = new OleDbParameter("Username", userid);
OleDbParameter param2 = new OleDbParameter("Password", password);
OleDbParameter param3 = new OleDbParameter("Email", email);
OleDbParameter param4 = new OleDbParameter("ID", id);
param1.DbType = DbType.AnsiString;
param1.Direction = ParameterDirection.Input;
param2.DbType = DbType.AnsiString;
param2.Direction = ParameterDirection.Input;
param3.DbType = DbType.AnsiString;
param3.Direction = ParameterDirection.Input;
param4.DbType = DbType.AnsiString;
param4.Direction = ParameterDirection.Input;
updateCmd.Parameters.Add(param1);
updateCmd.Parameters.Add(param2);
updateCmd.Parameters.Add(param3);
updateCmd.Parameters.Add(param4);
int rowsAffected = updateCmd.ExecuteNonQuery();
}
catch (Exception excep)
{
System.Diagnostics.Trace.WriteLine(excep.Message);
}
finally
{
if (_dbConn.State == ConnectionState.Open)
_dbConn.Close();
}
return;
}
我使用的是 C# 和 Access 2007,这在我更新单个列时工作得很好。但是当我试图同时更新多个列时,我开始得到这个异常
"Syntax error in UPDATE statement.".
Password
是 OLE DB 提供程序中的 reserved keyword。您需要将它与方括号一起使用,例如 [Password]
.
作为最佳实践,将其更改为非保留字。
也用using
statement来处理你的OleDbCommand
和OleDbConnection
,即使我们看不到它。
我同意声纳。密码是 OLE DB 提供程序中的保留关键字。
如果您使用多个 table,为了避免保留关键字引起的混淆 --
你必须使用。
select table.[密码] 来自 table;
更新table设置table.[密码]=?
public void EditUser(string id, string userid, string email, string password)
{
try
{
_dbConn.Open();
OleDbCommand updateCmd = new OleDbCommand("UPDATE LOGINS SET Username=?, Password=?, Email=? WHERE ID=?", _dbConn);
OleDbParameter param1 = new OleDbParameter("Username", userid);
OleDbParameter param2 = new OleDbParameter("Password", password);
OleDbParameter param3 = new OleDbParameter("Email", email);
OleDbParameter param4 = new OleDbParameter("ID", id);
param1.DbType = DbType.AnsiString;
param1.Direction = ParameterDirection.Input;
param2.DbType = DbType.AnsiString;
param2.Direction = ParameterDirection.Input;
param3.DbType = DbType.AnsiString;
param3.Direction = ParameterDirection.Input;
param4.DbType = DbType.AnsiString;
param4.Direction = ParameterDirection.Input;
updateCmd.Parameters.Add(param1);
updateCmd.Parameters.Add(param2);
updateCmd.Parameters.Add(param3);
updateCmd.Parameters.Add(param4);
int rowsAffected = updateCmd.ExecuteNonQuery();
}
catch (Exception excep)
{
System.Diagnostics.Trace.WriteLine(excep.Message);
}
finally
{
if (_dbConn.State == ConnectionState.Open)
_dbConn.Close();
}
return;
}
我使用的是 C# 和 Access 2007,这在我更新单个列时工作得很好。但是当我试图同时更新多个列时,我开始得到这个异常
"Syntax error in UPDATE statement.".
Password
是 OLE DB 提供程序中的 reserved keyword。您需要将它与方括号一起使用,例如 [Password]
.
作为最佳实践,将其更改为非保留字。
也用using
statement来处理你的OleDbCommand
和OleDbConnection
,即使我们看不到它。
我同意声纳。密码是 OLE DB 提供程序中的保留关键字。
如果您使用多个 table,为了避免保留关键字引起的混淆 -- 你必须使用。 select table.[密码] 来自 table;
更新table设置table.[密码]=?