2010-02-18 14 views
6

Domanda breve: Sto scoprendo che ho bisogno di usare MARS su ODBC ma non su ADO/OLEDB, è corretto? spiegazioneODBC da MARS ma ADO/OLEDB da VENUS?

più lunga:

Ho appena scoperto il mio codice ODBC (usando "Driver = {SQL Native Client}", MFC CDatabase codice) deve avere MARS ("MARS_Connection = yes;") perché, anche se lo faccio non emettere più SELECTs quando si apre un RecordSet, si preleva un batch di righe, quindi è necessario aprire un altro RecordSet per emettere un nuovo SELECT e quindi tornare al primo RecordSet per il batch successivo. Senza il MARS ottengo l'errore ODBC "La connessione è occupata con i risultati per un altro comando". Tutto abbastanza giusto.

Tuttavia, il mio codice funziona in modo identico con ADO/OLEDB ("Provider = SQLNCLI", #import msado15.dll) anziché ODBC. Nella stessa situazione, ho non dovuto specificare "MarsConn = yes".

Sono confuso/sorpreso. È corretto/previsto, o mi sfugge qualcosa?

risposta

5

Se qualcuno è interessato, ho scoperto qual è il problema/differenza. Ho dovuto rivisitare il codice a causa di un sottile problema nel caso ADO, che si è rivelato correlato.

Se sono necessari più RecordSet simultanei, è facile con ODBC, perché se non si utilizza MARS si commettono solo errori, come sopra.

Con ADO/OLEDB, tuttavia, è più sottile. Quando non utilizzo MARS, più RecordSet sembrano funzionare correttamente. Ma, sotto le coperte, quello che succede è che ADO apre automaticamente un'altra nuova sessione per ognuno, ma tu non ne sai niente e non puoi dirlo. E questo risulta essere molto lento, perché ogni sessione richiede un accesso di controllo completo & disattivato e sto creando, chiudendo e ricreando tutto il tempo.

Così ho inserito "MARS Connection = True" per ADO e, lo & beh, ora si comporta proprio come ODBC, riutilizzando la connessione esistente invece di crearne di nuove.

Quindi la morale è: si deve avere MARS per ODBC, mentre ADO/OLEDB permetterà più recordset simultanei senza MARS facendo la sua cosa, ma può (bene) non essere quello che vuoi/è meglio .

Problemi correlati