Перемещение базы данных с Sybase на SQL Сервер: ODB C не распознан поименованные параметры - PullRequest
0 голосов
/ 17 января 2020

Я обновляю старый проект, перемещая его источник данных из Sybase на SQL Сервер. Структуры данных идентичны (они обе являются копиями коммерческой базы данных - версия Sybase больше не поддерживается).

Поскольку она довольно старая, для подключения используется ODB C. Строки подключения изначально указали DSN. Мне удалось подключиться к SQL серверу, используя как необработанную строку подключения, так и заменяющий DSN.

Он выполняет код для базы данных, вытягивая текст команды из файла конфигурации и добавляя именованные параметры, например, так :

var args = new Dictionary<string, object>() 
{ 
    { "@myFirstParam", "myFirstValue" }, 
    { "@mySecondParam", "mySecondValue" }
}

IDbCommand cmd = Connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = Command.Timeout;

cmd.CreateParameters(Command.Parameters, args);
cmd.CommandText = [fetched from config]

IDataReader reader = null;
reader = cmd.ExecuteReader();

Все это нормально работало с Sybase.

Однако, когда я запускаю его с SQL, когда читатель запускается, я получаю следующую ошибку:

ОШИБКА [42000] [Microsoft] [ODB C Драйвер 17 для SQL Сервер] [SQL Сервер] Необходимо объявить скалярную переменную "@myFirstVariable".

Я получаю эту ошибку, указываю ли я соединение как DSN или необработанную строку. Шагая по коду, параметр, безусловно, объявлен и имеет допустимое значение.

Читая об этом, кажется, что такое поведение следует ожидать. Документация Microsoft по соединению ODB C гласит, что вы можете использовать именованные параметры, только если вы вызываете хранимую процедуру, а я нет. Видимо, правильный метод - поставить "?" символы в тексте команды и ODB C вставят параметры по индексу.

Если это правильно, я понятия не имею, как этот код работал с Sybase. У меня есть другой проект, который использует тот же код для загрузки данных, указывая именованные параметры и передавая их в команду SQL, указанную в config, но он указывает на другую SQL серверную базу данных.

Я предполагаю, что это может быть что-то делать с конфигурацией базы данных, но я довольно потерян, что попробовать здесь. Любые предложения будут с благодарностью.

...