これは私をクラッカーに駆り立てています!私はすべてを試したと思いますが、何が起こっているのか理解できません。さらに悪いことに、私は SQL サーバー上の SQL プロファイラーにアクセスできません。
メソッドに送信されるテスト値は、'Barrhead Townswomen''s Guild Collection' です。
ご覧のとおり、replace を使用して単一のアポストロフィを二重に変更しています。これはどういうわけかSQLを台無しにしていると思います!
値をコマンド パラメーターにパイプすると、クエリから結果が返されません。しかし、変数をクエリに直接含めるだけで機能します。
クエリは次のとおりです (簡潔にするために削除されています)。
public DataTable select_advancedSearch(string collection)
{
string cnn = ConfigurationManager.ConnectionStrings[connname].ConnectionString;
using (SqlConnection connection = new SqlConnection(cnn))
{
string SQL = string.Empty;
SQL = "SELECT tbl1.ResourceID, tbl1.ItemTitle, tbl1.Type, tbl1.Description, tbl1.CollectionTitle ";
SQL += "FROM [ercHeritage].[dbo].[ERC_HERITAGE_CORE] tbl1 ";
SQL += "WHERE tbl1.CollectionTitle LIKE '%'+ @Input1 +'%' ";
using (SqlCommand command = new SqlCommand(SQL, connection))
{
command.Parameters.Add("@Input1", SqlDbType.NVarChar,255);
command.Parameters["@Input1"].Value = collection.Replace("'", "''").Trim();
DataTable MyTable = new DataTable();
try
{
connection.Open();
SqlDataAdapter MyAdaptor = new SqlDataAdapter();
MyAdaptor.SelectCommand = command;
MyAdaptor.Fill(MyTable);
}
catch (Exception)
{
System.Web.HttpContext.Current.Response.Write("There was a problem with your request.");
}
return MyTable;
}
}
}
どんな答えでも大歓迎です!
ありがとうアラン