2016-04-19 24 views
3

おはよう!MySQL構文エラーASP.NET

私はどのようなエラーが発生しているのか把握しようとしています。

enter image description here

そして、ここに私のコードです:

protected void accountGridView_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    accountGridView.EditIndex = e.NewEditIndex; 
    BindData(); 
} 
protected void accountGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    int user_id = int.Parse(accountGridView.DataKeys[e.RowIndex].Value.ToString()); 
    TextBox txtUsername = (TextBox)accountGridView.Rows[e.RowIndex].FindControl("txtUsername"); 

    UpdateUser(user_id, txtUsername.Text); 
    accountGridView.EditIndex = -1; 
    BindData(); 
} 

private void UpdateUser(int user_id, string username) 
{ 
    GlobalVars cn = new GlobalVars(); 
    MySqlConnection connection = cn.connectDB(); 
    connection.Open(); 

    string query = "UPDATE user SET username = '" + username + " WHERE user_id = " + user_id + ""; 
    MySqlCommand com = new MySqlCommand(query, connection); 

    com.ExecuteNonQuery(); 
    connection.Close(); 

} 

私はそれを動作させることはできませんが、これは誤りです。私はここに何かを逃していますか

ご協力いただければ幸いです。

+1

単一の一重引用符のように見えますか? – mustaccio

答えて

4

エラーメッセージには、クエリに構文エラーがあるため、他の部分(接続)が正常に動作していると表示されます。今すぐクエリを考えてみます - あなたがプログラムをデバッグして見ればqueryあなたはそれがどのように見えることを見ることができますので、ここで何が間違って

UPDATE user SET username = 'asd WHERE user_id= usr_123 

をされている、あなたは、asd'を逃しウェア与える必要があります'のペアが指定するuser_id(それが文字列の場合)ので、問い合わせることができるようになります:

string query = "UPDATE user SET username = '" + username + "' WHERE user_id = '" + user_id + "'"; 

が、私は強くあなたがinjectionを避けるために、代わりに、このためにパラメータ化クエリを使用することをお勧めします。パラメータ化されたクエリは次のようになります。

string query = "UPDATE user SET username = @username WHERE user_id = @user_id"; 
MySqlCommand com = new MySqlCommand(query, connection); 
com.Parameters.Add("@username", MySqlDbType.VarChar).Value = username; 
com.Parameters.Add("@user_id", MySqlDbType.VarChar).Value = user_id; 
// execute query here 
+0

うわー、ありがとう。 – FewFlyBy