0

このエラーが発生します:

Unknown column 'admin' in 'where clause'

これは、[ログイン]ボタンのコードです。

        mycon.Open();
        string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = " + textBox1.Text + "";
        cmd = new MySqlCommand(cmdstr, mycon);
        dr = cmd.ExecuteReader();
        string inputpw = "";
        string dbpw = "";
        while (dr.Read())
        {
            inputpw = maskedTextBox1.Text;
            dbpw = (dr["user_pw"].ToString());
        }
        dr.Close();
        mycon.Close();

私のSelectステートメントは、オンラインで表示される他のすべてのselectステートメントと同じであるため、なぜこのエラーが発生するのかよくわかりません。

4

4 に答える 4

7

テキストボックスの値を一重引用符で囲みます

 string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = '" + textBox1.Text + "'";

編集:

Tigranがコメントしたように。コントロールからの値を連結する代わりに、パラメータ化されたクエリを使用します

于 2012-12-18T11:44:21.583 に答える
3

なぜそのエラーが発生するのかよくわかりません

次に、デバッグを開始します。行にブレークポイントを設定し、の内容cmd =を調べます。cmdstrクエリは次のとおりです。

SELECT * FROM usersettingsdb WHERE user_ID = admin

次に、ユーザー名を引用符で囲む必要があることがわかります。次に、SQLインジェクション、パラメーター化されたクエリ、およびDALについて読みます。

于 2012-12-18T11:53:06.070 に答える
1

textbox1.Textを囲むwhere句に「」の追加セットが必要です。そうでない場合は文字列を渡しません。

string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = \"" + textBox1.Text + "\"";
于 2012-12-18T11:45:33.813 に答える
1

このようなことをしてください。

 string cmdstr = string.Format("SELECT * FROM usersettingsdb " + 
                "WHERE user_ID = '{0}'", textBox1.Text.Replace("'","''"));

sqlはエスケープ文字と見なされるため、'置き換えます。'''

ただし、パラメータ化されたクエリを使用することをお勧めします。

于 2012-12-18T11:56:07.803 に答える