0

このエラーを検索したところ、次のようになりました。

「コード内のユーザー名とパスワードを一重引用符で囲む必要があります」...そうしましたが、コードにはまったく同じエラーが表示されます!

修正後の私のコードは次のとおりです。

String strng = " SELECT * FROM Table "
        + " WHERE Username = '" + txtUsername.Text + "' AND " 
        + " Password = '" + txtPassword.Text + "'";
4

1 に答える 1

4

Tableこれがテーブルの実際の名前であると仮定して、これを試してください

String strng = " SELECT * FROM [Table] "
    + " WHERE Username = '" + txtUsername.Text + "' AND " 
    + " Password = '" + txtPassword.Text + "'";

[]aroundに注意してください。これは予約語であるTableため、エスケープを目的としています。Table

これは SQL クエリを作成するための正しいアプローチではないという既存のコメントに同意します。SQL インジェクション攻撃にさらされており、読みやすさの観点からも悪化しています。代わりにパラメーターを使用する必要があります。

String strng = @" 
    SELECT * FROM [Table]
    WHERE Username = @UserName AND
    Password = @Password";
...
command.Parameters.AddWithValue("@UserName", txtUsername.Text);
command.Parameters.AddWithValue("@Password", txtPassword.Text);

さらに 2 つの点を考慮する必要があります。

  • ユーザー入力をエスケープしてXSS 攻撃を回避する
  • 平文ではなく、暗号化されたパスワードをデータベースに保存する
于 2013-03-10T18:43:30.823 に答える