asp.NetSqlParameter Likeの伝達パラメータが無効な問題について
944 ワード
通常の考え方では、コードを次のように書きます.
しかし、結果はクエリに結果が出ず、トレースコードにもエラーが見つからず、文字列でつなぎ合わせたくない(攻撃防止).そこでSqlの実行を追跡し,問題はSqlがパラメータに自動的に単一引用符を追加したことである.
実際にSqlでは、likeのコードをlike'%'Sam'%'と解析しているので、いくら調べても欲しい結果は得られません.
これにより、コードを次のように変更できます.
別の方法「select*FROM Table 1 where Name like '%'+@Name+'%'」でも問題を解決できます.
String searchName ="Sam";
String strSql = "select * FROM Table1 where Name like '%@Name%' ";
SqlParameter[] parameters = {
new SqlParameter("@Name", searchName)
};
しかし、結果はクエリに結果が出ず、トレースコードにもエラーが見つからず、文字列でつなぎ合わせたくない(攻撃防止).そこでSqlの実行を追跡し,問題はSqlがパラメータに自動的に単一引用符を追加したことである.
実際にSqlでは、likeのコードをlike'%'Sam'%'と解析しているので、いくら調べても欲しい結果は得られません.
これにより、コードを次のように変更できます.
String searchName ="Sam";
String strSql = "select * FROM Table1 where Name like @Name ";
searchName = "%"+searchName+"%"; // , Sql
SqlParameter[] parameters = {
new SqlParameter("@Name", searchName)
};
別の方法「select*FROM Table 1 where Name like '%'+@Name+'%'」でも問題を解決できます.