0

これは私をクラッカーに駆り立てています!私はすべてを試したと思いますが、何が起こっているのか理解できません。さらに悪いことに、私は 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;
                }
            }
        } 

どんな答えでも大歓迎です!

ありがとうアラン

4

1 に答える 1