При использовании следующего блока кода для извлечения пяти лучших записей я получаю совершенно разные результаты, чем при запуске того же сценария в 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, но я не знаю, почему он здесь не работает.