2010-02-18 2 views
6

Короткий вопрос: Я нахожу, что мне нужно использовать MARS над ODBC, но не над ADO/OLEDB, это правильно?Является ли ODBC от MARS, но ADO/OLEDB от VENUS?

Longer объяснение:

Я только что обнаружил мой ODBC код (с помощью "Driver = {SQL Native Client}", MFC CDatabase код) должен иметь MARS ("MARS_Connection = да"), потому что, хотя я не выдавайте несколько SELECT при открытии RecordSet, я получаю пакет строк, затем вам нужно открыть другой RecordSet, чтобы выпустить новый SELECT, а затем вернуться к первому RecordSet для следующей партии. Без MARS я получаю ошибку ODBC «Соединение занято результатами для другой команды». Все справедливо.

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

Я смущен/удивлен. Является ли это правильным/ожидаемым, или я что-то упускаю?

ответ

5

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

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

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

Таким образом, я ввел «MARS Connection = True» для ADO и, lo &, теперь он ведет себя точно так же, как ODBC, повторно используя существующее соединение вместо создания новых.

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

 Смежные вопросы

  • Нет связанных вопросов^_^