2010-02-18 19 views
6

Pregunta breve: Estoy descubriendo que necesito usar MARS sobre ODBC pero no sobre ADO/OLEDB, ¿es correcto? explicación¿ODBC es de MARS pero ADO/OLEDB de VENUS?

más larga:

acabo de descubrir mi código de ODBC (usando "Driver = {SQL Native Client}", el código de MFC CDatabase) necesita tener MARS ("MARS_Connection = yes;") porque, aunque me No emite múltiples SELECT al abrir un RecordSet, sí obtengo un lote de filas, luego necesito abrir otro RecordSet para emitir un nuevo SELECT y luego regresar al primer RecordSet para el siguiente lote. Sin MARS obtengo el error ODBC "La conexión está ocupada con los resultados de otro comando". Todo lo justo.

Sin embargo, mi código funciona de manera idéntica con ADO/OLEDB ("Provider = SQLNCLI", #import msado15.dll) en lugar de ODBC. En la misma situación, tengo no tuve que especificar "MarsConn = yes".

Estoy confundido/sorprendido. ¿Es correcto/esperado, o me estoy perdiendo algo?

Respuesta

5

Si alguien está interesado, descubrí cuál es el problema/diferencia. Tuve que revisar el código debido a un problema sutil en el caso de ADO, que resultó estar relacionado.

Si necesita varios RecordSets simultáneos, es fácil con ODBC, porque si no usa MARS simplemente comete errores, como se indicó anteriormente.

Con ADO/OLEDB, sin embargo, es más sutil. Cuando no uso MARS, múltiples RecordSets parecen funcionar bien. Pero, bajo las sábanas, lo que sucede es que ADO abre automáticamente otra sesión nueva para cada uno, pero usted no sabe y no puede saberlo. Y eso resulta ser muy lento, porque cada sesión requiere un inicio de sesión de auditoría completo & desactivado, y estoy creando, cerrando y volviendo a crear todo el tiempo.

Así que puse en "MARS Connection = True" para ADO y, lo & he aquí, ahora se comporta como ODBC, reutilizando la conexión existente en lugar de crear otras nuevas.

Así que la moraleja es: que que tener MARS para ODBC, mientras que ADO/OLEDB permitirá que varios conjuntos de registros simultáneos sin MARS haciendo su propia cosa, pero puede (también) no sea lo que quiere/es mejor .

Cuestiones relacionadas