Ошибка 80040e21 и DBBINDSTATUS_BADBINDINFO во время связывания после переключения с SQLOLEDB на SQLNCLI или поставщика MSOLEDBSQL

Я работаю над некоторым устаревшим кодом C ++, который использует OLE DB для подключения к базе данных SQL Server. Мне нужно перейти от старого поставщика SQLOLEDB к более современному (SQLNCLI, SQLNCLI10, SQLNCLI11 или MSOLEDBSQL). Предположительно, это может быть возможно путем простой смены провайдера, но я сталкиваюсь с ошибкой 80040e21 («Многоэтапные ошибки при работе OLE DB»), когда я переключаюсь на любого из более новых провайдеров (точно такая же ошибка для всех четырех перечисленные провайдеры). Это выгодно при вызове Bind после добавления записей связывания для всех столбцов. Если немного покопаться, то ошибка появляется, когда Bind вызывает IAccessor :: CreateAccessor, а один из столбцов возвращает состояние плохого связывания (DBBINDSTATUS_BADBINDINFO). Рассматриваемый столбец — VARCHAR (15), а другой столбец в моей тестовой таблице (INTEGER) не показывает состояние плохого связывания. Тип DB для столбца — DBTYPE_STR, и для буфера выделено 24 байта (16 для данных, 4 для длины и 4 для статуса).

Единственная найденная документация, связанная с DBBINDSTATUS_BADBINDINFO, находится по адресу https://msdn.microsoft.com/en-us/library/ms720969.aspx, и ни одна из возможных причин, обсуждаемых там, кажется, не применима к моему делу. Все работает нормально (с точно такой же таблицей и параметрами), когда я переключаю провайдера обратно на SQLOLEDB, поэтому что-то должно было измениться в провайдерах SQLNCLI (а также в новом провайдере MSOLEDBSQL). У кого-нибудь есть идеи о том, что могло бы измениться в новых провайдерах, чтобы вызвать это (и что я мог бы сделать, чтобы устранить ошибку)?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]