SQL命令语法错误信息:System.Data.SqlClient.SqlException: '附近有语法错误', ''

问题描述:

我建立的销售体系在C#中的点,我从接口传递的数据通过一个对象数据库。SQL命令语法错误信息:System.Data.SqlClient.SqlException: '附近有语法错误', ''

更新功能,每次我尝试更新时间抛出一个语法错误cmd.CommandText。

private void btnUpdate_Click(object sender, EventArgs e) //UPDATE FUNCTION// 
    { 
      user_management_system user_mgnt = new user_management_system(); 
      user_mgnt.Username = txt_userName.Text; 
      user_mgnt.Password = txt_password.Text; 
      user_mgnt.First_name = txt_firstName.Text; 
      user_mgnt.Last_name = txt_lastName.Text; 
      user_mgnt.Nationality = txt_nationality.Text; 
      user_mgnt.Email = txt_email.Text; 
      user_mgnt.Age = (txt_age.Text); 
      con.Open(); 
      SqlCommand cmd = con.CreateCommand(); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "UPDATE userlogin SET password = ('"+ user_mgnt.Password + "',first_name='" + user_mgnt.First_name + "',last_name='" + user_mgnt.Last_name + "',age='" + user_mgnt.Age + 
          "',nationality='" + user_mgnt.Nationality + "',email='" + user_mgnt.Email + "', WHERE username ='"+ user_mgnt.Username+ "')"; 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      MessageBox.Show("Data has been successfuly updated"); 
      displaydata(); 
+5

如果不使用参数,你将会有不好的时候。 SQL注入,格式错误等。 – LarsTech

+6

首先要做的就是停止构建SQL。总是使用参数化的SQL。除了其他任何东西,它都会让你更容易看到你实际使用的SQL。 (然后就是删除SQL注入攻击。)接下来,它看起来像是以纯文本形式存储密码 - 我强烈建议您也不要那么做。 –

有查询文本语法错误,请点击此形式

https://www.w3schools.com/sql/sql_update.asp

+1

谢谢!有效。 – Youssef

您的WHERE条款之前有一个额外的(放错地方)逗号。它应该是:

cmd.CommandText = "UPDATE userlogin SET password = ('"+ user_mgnt.Password + "',first_name='" + user_mgnt.First_name + "',last_name='" + user_mgnt.Last_name + "',age='" + user_mgnt.Age + 
          "',nationality='" + user_mgnt.Nationality + "',email='" + user_mgnt.Email + "' WHERE username ='"+ user_mgnt.Username+ "')"; 

编辑:我将与那些评论,你应该使用参数化SQL同意,还可以避免存储在数据库明文密码。