Я столкнулся с запутанной проблемой.
У меня есть хранимая процедура в базе данных SQL Server 2008 R2, которая принимает один параметр @Query
и выполняет простой запрос полнотекстового поиска:
CREATE PROCEDURE dbo.SearchMyTable
@Query varchar(250)
AS
SELECT
...
FROM
...
INNER JOIN FREETEXTTABLE (t, *, @Query) ft ON ( t.Id = ft.[Key] )
ORDER BY
ft.Rank DESC
Когда я открываю окно запроса в SQL Server Management Studio и проверяю это, набирая:
SearchMyTable 'truck'
Это прекрасно работает.
Когда я набираю следующее, оновсе еще работает и возвращает те же результаты (предположительно игнорируя шумовое слово ' a ')
SearchMyTable 'a truck'
Но затем я перешел на страницу ASP.NET.
private SqlDataReader DoQuery(SqlConnection connection, string query) {
SqlParameter parameter = new SqlParameter("Query", SqlDbType.VarChar);
parameter.Value = query;
SqlCommand command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "SearchMyTable";
command.Parameters.Add(parameter);
return command.ExecuteReader();
}
Когда я звоню DoQuery(connection, "truck");
, он работает и снова получает те же результаты, которые я форматирую и распечатываю на своей странице.
Но когда я делаю вторую версию со словом шума,DoQuery(connection, "a truck");
, SqlDataReader возвращается пустым без строк!
Я очень запутался.Я предполагаю, что с моей хранимой процедурой все в порядке, так как она работает при вызове ее непосредственно из окна запроса в SQL Management Studio.
Так почему кажется, что она дает разные результаты в зависимости от того, вызываю ли я ее как необработанный запросили через поставщика SQL Server ADO.NET на моей странице ASP.NET?Я что-то упустил?
РЕДАКТИРОВАТЬ: Казалось бы, нет ничего плохого в вышесказанном.Я нашел решение, которое может даже быть ошибкой в SQL / .NET.Смотрите мой ответ ниже.