UPDATE 语句中的语法错误 OleDbException
Syntax error in UPDATE statement OleDbException
我正在编写一个存储用户信息的应用程序。目前用户应该更新他们的姓名、身高、体重和生日。
string height = TB_ClientHeight.Text;
string weight = TB_ClientWeight.Text;
string name = TB_ClientName.Text;
string bday = dateTimePicker1.Value.ToString("dd-MM-yyyy");
int heightint = Convert.ToInt32(height);
int weightint = Convert.ToInt32(weight);
它通过从另一个表单调用 public static string
用户名变量并将其用作 WHERE UserName = @username
来更新。
usernamestringo = Login.usernameFromLogin;
我在这方面遵循了其他 SO 答案并纠正了一些问题(比如防止 SQL 注入)。但是,在更新 OleDbException
声明的这些字段时,我仍然遇到语法错误。
using (OleDbConnection myCon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=O:\Repos\Database\Database.accdb;Persist Security Info=False"))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandType = CommandType.Text;
string query = "UPDATE TPersons SET Name=@Name, SET Height=@Height, SET Weight=@Weight, SET Bday=@Bday " + " WHERE FirstName= @username";
cmd.CommandText = query;
cmd.Parameters.AddWithValue("@Name", name.ToString());
cmd.Parameters.AddWithValue("@Height", heightint.ToString());
cmd.Parameters.AddWithValue("@Weight", weightint.ToString());
cmd.Parameters.AddWithValue("@Bday", bday.ToString());
cmd.Parameters.AddWithValue("@username", usernamestringo);
cmd.Connection = myCon;
myCon.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Updated!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
cmd.Parameters.Clear();
}
OleDbException
是:
Index #0
NativeError: -526847407
Source: Microsoft Access Database Engine
SQLState: 3000
Description (message): Syntax error in UPDATE statement.
谁能指导我语法错误的地方?谢谢!
更新语法是
UPDATE <tablename> SET field1=Value1, field2=Value2 WHERE primarykeyname=Value3
SET 关键字仅在要更新的第一列之前,而 NAME 列还有另一个问题。在 Access 中,这是一个保留关键字。在该列名称周围使用方括号(或者最好将其更改为不那么麻烦的名称)
所以:
string query = @"UPDATE TPersons SET [Name]=@Name,
Height=@Height, Weight=@Weight, Bday=@Bday
WHERE FirstName= @username";
与您当前的问题没有严格的关系,但您还应该看看这篇文章 Can we stop using AddWithValue already? DbCommand.AddWithValue 是一个有很多缺点的快捷方式。最好避免它。
我正在编写一个存储用户信息的应用程序。目前用户应该更新他们的姓名、身高、体重和生日。
string height = TB_ClientHeight.Text;
string weight = TB_ClientWeight.Text;
string name = TB_ClientName.Text;
string bday = dateTimePicker1.Value.ToString("dd-MM-yyyy");
int heightint = Convert.ToInt32(height);
int weightint = Convert.ToInt32(weight);
它通过从另一个表单调用 public static string
用户名变量并将其用作 WHERE UserName = @username
来更新。
usernamestringo = Login.usernameFromLogin;
我在这方面遵循了其他 SO 答案并纠正了一些问题(比如防止 SQL 注入)。但是,在更新 OleDbException
声明的这些字段时,我仍然遇到语法错误。
using (OleDbConnection myCon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=O:\Repos\Database\Database.accdb;Persist Security Info=False"))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandType = CommandType.Text;
string query = "UPDATE TPersons SET Name=@Name, SET Height=@Height, SET Weight=@Weight, SET Bday=@Bday " + " WHERE FirstName= @username";
cmd.CommandText = query;
cmd.Parameters.AddWithValue("@Name", name.ToString());
cmd.Parameters.AddWithValue("@Height", heightint.ToString());
cmd.Parameters.AddWithValue("@Weight", weightint.ToString());
cmd.Parameters.AddWithValue("@Bday", bday.ToString());
cmd.Parameters.AddWithValue("@username", usernamestringo);
cmd.Connection = myCon;
myCon.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Updated!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
cmd.Parameters.Clear();
}
OleDbException
是:
Index #0 NativeError: -526847407 Source: Microsoft Access Database Engine SQLState: 3000 Description (message): Syntax error in UPDATE statement.
谁能指导我语法错误的地方?谢谢!
更新语法是
UPDATE <tablename> SET field1=Value1, field2=Value2 WHERE primarykeyname=Value3
SET 关键字仅在要更新的第一列之前,而 NAME 列还有另一个问题。在 Access 中,这是一个保留关键字。在该列名称周围使用方括号(或者最好将其更改为不那么麻烦的名称)
所以:
string query = @"UPDATE TPersons SET [Name]=@Name,
Height=@Height, Weight=@Weight, Bday=@Bday
WHERE FirstName= @username";
与您当前的问题没有严格的关系,但您还应该看看这篇文章 Can we stop using AddWithValue already? DbCommand.AddWithValue 是一个有很多缺点的快捷方式。最好避免它。