0

WinForm にテキスト ボックスがあります。

ユーザーがテキスト (キーボードで許可されているもの) を入力します。[保存] をクリックすると、次のようなエラー メッセージが表示されることがあります。

クエリ式の構文エラー (演算子がありません)

' のような特定の文字が SQL クエリを壊していることを知っています

いくつかの質問を聞きたいんです

  1. クエリが壊れず、ユーザーが好きなように入力できるようにするためにできることはありますか?
  2. #1 を行う方法がない場合、テキストをスキャンして、クエリを壊す可能性のあるすべての文字を削除するにはどうすればよいですか?
4

3 に答える 3

5

パラメータを使用してテキストボックスの値をクエリに渡してみてください。これにより、SQL インジェクション攻撃も防止できます。

次のようになります。

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * from TableName WHERE FieldA = @FieldValue";
cmd.CommandType = CommandType.Text;

//Define SqlParameter object and assign value to the parameter
cmd.Parameters.Add("@FieldValue", SqlDbType.VarChar, 50);
cmd.Parameters["@FieldValue"].Value = TextBox.Value;
于 2012-04-25T14:25:59.607 に答える
2

' のような特定の文字が SQL クエリを壊していることを知っています

この場合、文字列連結を使用してパラメータを追加しているようです。

代わりに SQL パラメータを使用すると、問題が解決するはずです。

また、文字列連結を使用して SQL クエリを作成すると、SQL インジェクションが発生しやすくなります。

于 2012-04-25T14:25:53.683 に答える
0
  1. より良い方法は、パラメーター化されたクエリを使用することです。コマンドへのパラメータの追加を参照してください。これにより、悪い性格の問題が解決されるだけでなく、SQL インジェクション(ウィキペディア) の危険も排除されます。

  2. それでも文字列連結を使用したい場合は、一重引用符を 2 つの一重引用符に置き換えるだけで十分安全です。

string sql = "SELECT * FROM tbl WHERE Name = '" + name.Replace("'","''") + "'";
于 2012-04-25T14:29:16.100 に答える