Включение нескольких наборов результатов в соединении ODBC с SQL Server - PullRequest
3 голосов
/ 24 апреля 2010

У меня есть приложение, которое изначально должно было подключаться к Sybase (через ODBC), но мне нужно было также добавить возможность подключения к SQL Server. Поскольку ODBC должен уметь справляться с обоими, я думал, что у меня хорошая позиция.

Неудобно, SQL Server по умолчанию не позволяет мне вкладывать команды ODBC и ODBCDataReaders - он жалуется, что соединение занято (Соединение занято результатами для другой команды).

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

Мастер DSN не имеет входа y при создании SystemDSN.

Некоторые люди предусмотрели хаки реестра, но это не сработало (добавьте MARS_Connection со значением Да в HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBC.INI \ system-dsn-name).

Другое предложение состояло в том, чтобы создать файл-dsn и добавить к нему "MARS_Connection = YES". Не сработало.

Наконец, строка подключения без DSN. Я попробовал это (используя MultipleActiveResultSets - та же переменная, что и для соединения с Sql Server),

"Driver={SQL Native Client};Server=xxx.xxx.xxx.xxx;Database=someDB;Uid=u;Pwd=p;MultipleActiveResultSets=True;"

и вот этот:

"Driver={SQL Native Client};Server=192.168.75.33\\ARIA;Database=Aria;Uid=sa;Pwd=service;MARS_Connection=YES;"

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

Я должен заявить, что я пробовал как драйвер SQL Server, так и собственный драйвер SQL Server ...

1 Ответ

4 голосов
/ 24 апреля 2010

Согласно документации SNI на Использование нескольких активных наборов результатов (MARS) :

Собственный клиент SQL Server ODBC драйвер поддерживает MARS через дополнения к SQLSetConnectAttr и Функции SQLGetConnectAttr. SQL_COPT_SS_MARS_ENABLED был добавлено, чтобы принять либо SQL_MARS_ENABLED_YES или SQL_MARS_ENABLED_NO, с SQL_MARS_ENABLED_NO является значением по умолчанию. Кроме того, новая строка подключения ключевое слово Mars_Connection, как было добавлено. Он принимает «да» или «нет» ценности; «нет» - это значение по умолчанию .

Убедитесь, что ваш клиент загружает нужные драйверы, использует Mars_Connection=yes и подтвердите в приложении, проверив SQL_COPT_SS_MARS_ENABLED на SQLGetConnectAttr .

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