2009-12-18 3 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와의 연결을 공유 할 수 없습니다. ODBC 용 ADO 공급자를 사용하는 경우에도 ADO API가 기존 ODBC 연결 핸들을 래핑 할 수 없기 때문에 여전히 사용할 수 없습니다.

하지만 진짜 질문은 연결을 공유하고 싶은 이유입니다. 유일한 유효한 이유는 루프백 로컬 분산 트랜잭션을 수행하지 않고 두 트랜잭션을 같은 트랜잭션에 등록하는 것입니다. 동일한 트랜잭션에서 두 개의 별개의 연결을 등록하는 것이 항상 가능했습니다. MTS와 COM +가 작동하는 방식입니다. 첫 번째 연결은 sp_getbindtoken을 사용하여 등록 토큰을 가져오고 두 번째 연결은 sp_bindsession을 사용하여 등록합니다. 이 메커니즘은 멸종 위기에 처한 목록에 있지만 결국 90 년대의 기술에 대해 묻고 있습니다 ... (ODBC, ADO)

+0

해당 응용 프로그램은 SPID를 잠금 식별자로 사용합니다. 우리는 ODBC에서 ADO로 마이그레이션하고 있으며 그것을 단편적으로 변환 할 수 있기를 원했습니다. 불행히도 이것은 잠금 구현을 다시 코딩하거나 모든 ODBC 코드를 ADO로 변환해야 함을 의미합니다. (그리고 예, 그 시대의 애플 리케이션). – stusmith

+0

나는 본다. 아마도 당신은 다른 방법으로 ODBC ADO Provider를 통해 ADO에서 핸들을 연 다음 hEnv와 hDbc를 ODBC 모듈로 전달하여 소비 할 수 있습니다. –

+0

모든 의견과 답변에 감사드립니다. 우리는 철저한 ODBC-ectomy를 수행하기로 결정했습니다. 관심사 인 Remus에 대해 ADO/ODBC를 사용하여 열었다고 가정하고 ADO 연결에서 henv 및 hdbc를 가져 오는 방법은 무엇입니까? – stusmith

관련 문제