ODBC с МАРСА, но ADO/OLEDB от ВЕНЕРЫ?

Короткий вопрос: Я нахожу, что должен использовать МАРС по ODBC, но не по ADO/OLEDB, который корректен?

Более длительное объяснение:

Я просто обнаружил, что мой код ODBC (использующий "Драйвер = {Собственный Клиент SQL}", MFC код CDatabase) должен иметь МАРС ("MARS_Connection=yes";), потому что, хотя я не выпускаю несколько ВЫБОРОВ при открытии RecordSet, я действительно выбираю пакет строк, затем должен открыть другой RecordSet, чтобы выпустить новый ВЫБОР и затем возвратиться в первый RecordSet для следующего пакета. Без МАРСА я добираюсь, ошибочное соединение "ODBC занято результатами для другой команды". Вся достаточно ярмарка.

Однако мой код работает тождественно с ADO/OLEDB ("Provider=SQLNCLI", #import msado15.dll) вместо ODBC. В той же ситуации я не должен был указывать "MarsConn=yes".

Я путаюсь/удивляюсь. Это, исправляют/ожидают, или я пропускаю что-то?

7
задан JB1 18 February 2010 в 09:51
поделиться

1 ответ

Если кому интересно, выяснил в чем проблема / отличие. Мне пришлось пересмотреть код из-за тонкой проблемы в случае ADO, которая оказалась связанной.

Если вам нужно несколько одновременных наборов записей, это просто с ODBC, потому что, если вы не используете MARS, это просто ошибки, как указано выше.

Однако с ADO / OLEDB все более тонко. Когда я не использую MARS, кажется, что несколько RecordSet просто работают нормально. Но, по сути, происходит то, что ADO автоматически открывает еще один новый сеанс для каждого из них, но вы не знаете об этом и не можете сказать. И это оказывается очень медленным, потому что каждый сеанс требует полного входа в систему и выхода из аудита, а я все время создаю, закрываю и воссоздаю.

Поэтому я ввел "MARS Connection = True" для ADO, и вот, теперь он ведет себя так же, как ODBC, повторно используя существующее соединение вместо создания нового.

Итак, мораль такова: вы должны иметь MARS для ODBC, в то время как ADO / OLEDB позволит несколько одновременных RecordSet без MARS, выполняя свои собственные действия, но это может (хорошо) быть не тем, что вы хотите /лучший.

6
ответ дан 7 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: