Выберите TOP 5, возвращая только одну строку при вызове через код, где тот же сценарий возвращает 5 строк в SQL Server - PullRequest
0 голосов
/ 01 мая 2018

При использовании следующего блока кода для извлечения пяти лучших записей я получаю совершенно разные результаты, чем при запуске того же сценария в SQL Sever 2008.

DataTable results = new DataTable();
string cmdTxt = String.Format("select top 5 ID, NAME from TABLE where ID like @ID or NAME like @NAME order by ID asc");
using (SqlCommand cmd = new SqlCommand(cmdTxt, Butch.connection))
{
    cmd.Parameters.Add("@ID", SqlDbType.Char, 15).Value = IdBox.Text + "%";
    cmd.Parameters.Add("@NAME", SqlDbType.Char, 65).Value = IdBox.Text + "%";
    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
           adapter.Fill(results);
 }

Например, передав параметр «0» в IdBox, я получаю одну строку результатов с идентификатором «01», но в SQL Server я получаю 5 строк с идентификатором «000001», «000002», «000003», «000004», «000005». Передача «00» вместо этого вернет ноль строк из моего кода, но те же 5 из SQL Server. Если я передам '00000', я получу те же результаты из кода, что и из сервера SQL.

Есть ли способ заставить мой код возвращать те же результаты, что и мой SQL-запрос? Я попытался использовать больше символов подстановки в моих параметрах кода на случай, если он проверял только один символ, но это не сработало. У меня есть тот же код, работающий в другом месте, который использует NVarChar SqlDataType, но я не знаю, почему он здесь не работает.

1 Ответ

0 голосов
/ 01 мая 2018

SqlDbType.Char соответствует CHAR, который, если необходимо, заполнен пробелом, чтобы быть точно заданной длиной.

Ваш запрос заканчивается примерно так:

select top 5 ID, NAME from TABLE where ID like '0%             ' or NAME like '%                                                                ' order by ID asc

И эти шаблоны просто не будут совпадать.

Попробуйте SqlDbType.VarChar или SqlDbType.NVarChar (если соответствующий столбец тоже N...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...