2017-07-21 6 views
0

私はC#でPoint of Salesシステムを構築していますが、オブジェクトからデータベースへのインターフェイスのデータを渡しています。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インジェクション攻撃が取り除かれています)次に、パスワードをプレーンテキストで保存しているように見えます。これをやめることを強くお勧めします。 –

答えて

2

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を使用する必要があることをコメントしたものと一致し、また、DBにプレーンテキストのパスワードを保存しないでしょう。あなたはパラメータを使用しない場合