0

我正在编写一个存储用户信息的应用程序。目前,用户应该更新他们的姓名、身高、体重和生日。

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

索引 #0 NativeError:-526847407 来源:Microsoft Access 数据库引擎 SQLState:3000 描述(消息):UPDATE 语句中的语法错误。

任何人都可以指导我的语法错误吗?谢谢!

4

1 回答 1

2

更新语法是

 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";

与您当前的问题不严格相关,但您也应该看看这篇文章我们可以停止使用 AddWithValue 吗? DbCommand.AddWithValue 是一个有许多缺点的快捷方式。最好避免它。

于 2015-05-02T22:57:23.470 回答