Я использую SqlDataSource для заполнения моего GridView, потому что они кажутся очень тесно связанными друг с другом. Поскольку эта сетка показывает результаты поиска, у меня есть динамическая строка sql, записанная в моем коде программной части, которая ссылается на параметры, которые я передаю, например, ниже:
sdsResults.SelectParameters.Add("CodeID", TypeCode.String, strCodeID)
Моя проблема в том, что поле CodeID является полем varchar. Как вы, возможно, уже знаете, передача поля nvarchar для сравнения с полем varchar может быть очень пагубной для производительности sql. Однако SelectParameters.Add принимает только типы TypeCode, что, кажется, дает мне только unicode TypeCode.String в качестве моего жизнеспособного варианта.
Как заставить мой SqlDataSource использовать varchars? На данный момент я не могу изменить тип данных - это главный ключ большого приложения 10-летней давности, и, честно говоря, varchar подходит для этого приложения.





Кстати, мой обходной путь прямо сейчас позволяет SqlDataSource передавать параметр как nvarchar. Моя первая строка в моем SQL затем явно преобразует этот параметр nvarchar в переменную varchar и вместо этого использует эту новую переменную varchar через мой скрипт.
Но это кажется глупым.
Возможно, это сработает:
using System.Data;
sdsResults.SelectParameters.Add("CodeID", SqlDbType.VarChar, strCodeID);
Нет, к сожалению, для этого требуется, чтобы был передан параметр System.TypeCode. Использование SqlDbType приводит к ошибке компиляции.