2016-10-03 7 views
-4

私はこのコードにこだわっている:C#の構文エラー

con.Open(); 

OleDbCommand cmd1 = new OleDbCommand(); 
cmd1.Connection = con; 
cmd1.CommandText = "update login set password='"+passw.Text+"', Username='" + username.Text + "', firstname='" + user_name.Text + "', address='" + useraddress.Text + "',contact_no='" + usercontactno.Text + "',email='" + useremail.Text + "',birthday='" + userbirthday.Text + "',age='" + userage.Text + "' where id=" + nem + " "; 

cmd1.ExecuteNonQuery(); 
con.Close(); 

クエリがうまく機能しているが、私はそれを実行するたびに、それが言うこと、「パスワード= ' 『+ passw.text +』 ''に構文エラーがあります。その行を削除すると、更新が正しく機能します。

+7

平文のパスワードは保管しないでください。 1970年代じゃない!また、ユーザが入力したテキストフィールドを連結しないでください:パラメータを使用します。 –

+0

コンソールにテキストを出力して見てください!もしpassw.Textに 'あなたが本当に立ち往生していれば.. – TaW

+8

Little Bobby Tablesがこのコードを好きです。 –

答えて

0

私は今見る二つの最も可能性の高い問題:

  1. passw.Textは、パスワードの列がnull値
  2. は、ログインテーブルを持っていないことはできません、値およびログインテーブルを持っていない可能性があります「パスワード」と呼ばれる列
+0

別の問題は、彼の 'passw.Text'は特殊文字を返します – Jacky

1

パスワードは予約語です。あなたが例えば、[パスワード]または「パスワード」としてそれを引用する必要があります。:

cmd1.CommandText = "update login set [password]='"+passw.Text+"', Username='" + username.Text + "', firstname='" + user_name.Text + "', address='" + useraddress.Text + "',contact_no='" + usercontactno.Text + "',email='" + useremail.Text + "',birthday='" + userbirthday.Text + "',age='" + userage.Text + "' where id=" + nem + " "; 

また、あなたは避ける必要が別の重要なことは、このようなSQL文に入力文字列を渡しています。あなたは入力文字列で引用符を取る必要があります。 Bla'blaに設定された名字があなたのコードを破ります。これを避ける最善の方法は、パラメータを使用することです。

最後に、接続とコマンドオブジェクトの両方が使い捨てであるため、使用ブロックでラップするのが最善です。

+0

良いキャッチ!パスワードは__all__ SQL [dialects](http://developer.mimer.se/validator/sql-reserved-words.tml)には__not__で予約されていますが、[here here](http://www.petefreitag.com/ tools/sql_reserved_words_checker /?word = password) 。 – TaW

関連する問題