asp.NetSqlParameter Likeの伝達パラメータが無効な問題について

944 ワード

通常の考え方では、コードを次のように書きます.
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+'%'」でも問題を解決できます.