2

かなり単純な質問

次のような SQL 文字列があります。

query = "select * from table_name where name ='"+varName+"' and 
date ='"+varDate+"' order by state desc";

varNamevarDateは、別のデータベースのテーブルに対する以前の選択クエリから定義されています。それらの値には、' : / およびその他の特殊文字が含まれる場合があります。

上記のselectステートメントでvarName、varDateの内容を「エスケープ」できるC#またはSQLを使用する方法はありますか?

特殊文字を隠したくないです:)

編集:

含めるのを忘れました-セットアップはMSSQLです

4

2 に答える 2

6

十分に成熟した API を使用して、クエリをパラメーター化できます。このサポートは ADO.NET で提供されます。

string query = "select * from table_name where name = @name and date = @date order by state desc";
using (SqlCommand cmd = new SqlCommand(query))
{
  cmd.Parameters.Add("@name", name);
  cmd.Parameters.Add("@date", date);
  using (SqlDataReader reader = cmd.ExecuteReader())
  { ... }
}
于 2012-09-21T21:36:51.987 に答える
2

storeadプロシージャでコンパイルしたままにします

注:エスケープに関係なく、現在のコードはSQLインジェクションに対して広く開かれています

于 2012-09-21T21:36:07.807 に答える