2009-12-18 2 views
0

Возможно ли, что соединение ODBC и соединение ADO используют одно и то же базовое соединение SQL Server, так что оба используют один и тот же SPID?Могу ли я использовать одно соединение с базой данных между ODBC и ADO?

В настоящее время я использую SQLDriverConnect и ADODB :: _ ConnectionPtr-> Open. Я могу сделать эти соединения в любом порядке, так что, возможно, можно открыть один из них, используя другой?

(Язык C++, база данных - это SQL Server 2005 & 2008. Строка соединения ODBC использует DSN. ADO использует Provider = SQLNCLI10, но при необходимости может быть изменен).

ответ

1

ADO использует OleDB, поэтому вы не можете использовать соединение с ODBC. Даже если вы используете поставщик ADO для ODBC, вы все равно не сможете, так как ни один ADO API не позволяет обернуть существующий дескриптор соединения ODBC.

Но настоящий вопрос: зачем вы хотите поделиться этим соединением? Единственная действительная причина заключается в том, чтобы зарегистрировать два соединения в одной транзакции, не делая локальную распределенную транзакцию loopback. Взаимодействие двух разных соединений в одной транзакции всегда было возможно, так работали MTS и COM +. Первое соединение использует sp_getbindtoken, чтобы получить токен регистрации, а второе соединение использует sp_bindsession для регистрации. Этот механизм находится под угрозой исчезновения, но в конце концов вы спрашиваете о технологии 90-х годов ... (ODBC, ADO)

+0

В рассматриваемом приложении SPID используется как идентификатор блокировки. Мы переходим к ADO из ODBC, и я хочу, чтобы иметь возможность конвертировать его по частям. К сожалению, это означает, что мне придется либо перекодировать реализацию блокировки, либо конвертировать весь код ODBC в ADO. (И да, приложение датируется той эпохой). – stusmith

+0

Я вижу. Возможно, вы можете сделать наоборот, откройте дескрипторы ADO (через ODBC ADO Provider), затем передайте hEnv и hDbc в модули ODBC, чтобы их потреблять. –

+0

Спасибо всем за комментарии и ответы. Мы решили выполнить прямую ODBC-эктомию. Просто для интереса, Ремус, как я могу получить хен и hdbc из ADO-соединения, предполагая, что он был открыт с использованием ADO/ODBC? – stusmith

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

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