Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UPDATE语句OLEDBEException中的语法错误_C#_Sql_Oledb_Oledbexception_Updateexception - Fatal编程技术网

C# UPDATE语句OLEDBEException中的语法错误

C# UPDATE语句OLEDBEException中的语法错误,c#,sql,oledb,oledbexception,updateexception,C#,Sql,Oledb,Oledbexception,Updateexception,我正在编写一个存储用户信息的应用程序。目前,用户应该更新他们的姓名、身高、体重和生日 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 = Conve

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

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);
通过从另一个表单调用
公共静态字符串
username变量并将其用作
其中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();
}
OLEDBEException
是:

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

谁能告诉我语法哪里错了吗?谢谢大家!

更新语法是

 UPDATE <tablename> SET field1=Value1, field2=Value2 WHERE primarykeyname=Value3

与您当前的问题没有严格的关系,但您也应该看看本文DbCommand.AddWithValue是一种有许多缺点的快捷方式。最好避免它。

我想你只需要一个
SET
,然后是所有逗号分隔的字段名到值赋值。你有没有查过如何使用
SET
语句。。只需执行一个简单的msdn Update Set`语句,您就可以节省大量时间。。您只需要一个
SET
语句,用
分隔后面的其余值,
我刚刚意识到
SET
语句的事情。此外,显然“Name”是一个保留字,所以我也做了
[Name]
。代码现在运行得很好!谢谢。错过了
名称
列的问题+1是-我在发布问题时意识到了
[Name]
问题。非常感谢你的帮助!
string query = @"UPDATE TPersons SET [Name]=@Name, 
                 Height=@Height, Weight=@Weight, Bday=@Bday 
                 WHERE FirstName= @username";