2009-12-18 3 views
0

Est-il possible d'avoir une connexion ODBC et une connexion ADO partagent la même connexion SQL Server sous-jacente, de sorte que les deux utilisent le même SPID?Puis-je partager une connexion de base de données unique entre ODBC et ADO?

Actuellement, j'utilise SQLDriverConnect et ADODB :: _ ConnectionPtr-> Open. Je peux faire ces connexions dans n'importe quel ordre, alors peut-être qu'il est possible d'en ouvrir un en utilisant l'autre?

(La base de données est SQL Server 2005 & 2008. La chaîne de connexion ODBC utilise un DSN, ADO utilise Provider = SQLNCLI10, mais peut être modifié si nécessaire).

Répondre

1

ADO utilise OleDB, donc vous ne pouvez pas partager une connexion avec ODBC. Même si vous utilisez le fournisseur ADO pour ODBC vous ne pourrez toujours pas, car aucune API ADO ne permet d'envelopper un descripteur de connexion ODBC existant.

Mais la vraie question est: pourquoi voulez-vous partager la connexion? La seule raison valable est d'inscrire les deux connexions dans la même transaction sans effectuer de transaction distribuée locale en boucle. L'inscription de deux connexions distinctes dans une même transaction était toujours possible, c'est ainsi que fonctionnaient MTS et COM +. La première connexion utilise sp_getbindtoken pour obtenir un jeton d'inscription et la deuxième connexion utilise sp_bindsession pour s'inscrire. Ce mécanisme est sur la liste de dépréciation en danger, mais après tout vous posez des questions sur la technologie des années 90 ... (ODBC, ADO)

+0

L'application en question utilise le SPID comme identifiant de verrouillage. Nous migrons vers ADO à partir d'ODBC, et je voulais être capable de le convertir au coup par coup. Malheureusement, cela signifie que je devrai re-coder l'implémentation de verrouillage ou convertir tout le code ODBC en ADO. (Et oui, l'application date de cette époque). – stusmith

+0

Je vois. Peut-être que vous pouvez faire l'inverse, ouvrez les poignées dans ADO (via le fournisseur ODBC ADO) puis passez le hEnv et hDbc aux modules ODBC à consommer. –

+0

Merci à tous pour vos commentaires et réponses. Nous avons décidé d'effectuer une ODCT-ectomie pure et simple. Juste pour l'intérêt, Remus, comment pourrais-je obtenir le henv et hdbc à partir d'une connexion ADO, en supposant qu'il avait été ouvert en utilisant ADO/ODBC? – stusmith

Questions connexes