Actualizar una aplicación de MDCA a SQL Server Native Client

Existen varias diferencias entre SQL Server Native Client y Microsoft Data Access Components (MDAC; a partir de Windows Vista, los componentes de acceso a datos se denominan Data Access Components para Windows o DAC para Windows). Aunque ambos proporcionan acceso a datos nativos a las bases de datos de SQL Server, SQL Server Native Client está específicamente diseñado para exponer las nuevas características de SQL Server 2005 y, al mismo tiempo, mantener la compatibilidad con versiones anteriores.

La información de este tema puede servirle de ayuda para actualizar su aplicación MDAC (o Windows DAC) con la versión de SQL Server Native Client que se incluía en SQL Server 2005. Para obtener información que le sirva de ayuda para actualizar esta aplicación con la versión de SQL Server Native Client que se incluye en SQL Server 2008, vea Actualizar una aplicación de SQL Server 2005 Native Client a SQL Server 2008 Native Client.

Además, aunque MDAC contiene componentes para usar OLE DB, ODBC y objetos de datos ActiveX (ADO), SQL Server Native Client sólo implementa OLE DB y ODBC (aunque ADO puede tener acceso a la funcionalidad de SQL Server Native Client).

SQL Server Native Client y MDAC presentan diferencias en las áreas siguientes:

  • Es posible que los usuarios que obtengan acceso a un proveedor de SQL Server Native Client mediante ADO encuentren menos funcionalidad de filtrado que cuando obtienen acceso a un proveedor OLE DB de SQL.

  • Si una aplicación ADO usa SQL Server Native Client e intenta actualizar una columna calculada, se notificará un error. Con MDAC, la actualización se acepta, pero se omite.

  • SQL Server Native Client es un único archivo de biblioteca de vínculos dinámicos (DLL) independiente. Las interfaces que se exponen públicamente se han reducido al mínimo, tanto para facilitar la distribución como para limitar la exposición a riesgos de seguridad.

  • Sólo se admiten las interfaces ODBC y OLE DB.

  • Los nombres del proveedor OLE DB y del controlador ODBC de SQL Server Native Client son distintos a los que se usan con MDAC.

  • La funcionalidad accesible al usuario que proporcionan los componentes MDAC también está disponible cuando se usa SQL Server Native Client. Entre otras características, se incluyen las siguientes: agrupación de conexiones, compatibilidad con ADO y compatibilidad con cursores de cliente. Cuando se utiliza cualquiera de estas características, SQL Server Native Client sólo proporciona conectividad de base de datos. MDAC proporciona funciones como seguimiento, controles de administración y contadores de rendimiento.

  • Las aplicaciones pueden usar los servicios principales de OLE DB con SQL Server Native Client, pero si usan el motor de cursor de OLE DB, deberían usar la opción de compatibilidad de tipo de datos para evitar cualquier problema que pudiera surgir debido a que el motor del cursor no tiene ningún conocimiento de los nuevos tipos de datos de SQL Server 2005.

  • A partir de SQL Server 7.0 y versiones más recientes, SQL Server Native Client admite el acceso a bases de datos anteriores a SQL Server.

  • SQL Server Native Client no incluye integración XML. SQL Server Native Client admite consultas SELECT … FOR XML, pero no admite ninguna otra funcionalidad XML. Sin embargo, SQL Server Native Client admite el tipo de datos xml introducido en SQL Server 2005.

  • SQL Server Native Client admite la configuración de bibliotecas de red del lado cliente sólo mediante el uso de atributos de cadena de conexión. Si necesita una configuración de biblioteca de red más completa, debe usar el Administrador de configuración de SQL Server.

  • SQL Server Native Client no es compatible con odbcbcp.dll. Las aplicaciones que usan ODBC y las API bcp deben generarse de nuevo para vincularse con sqlncli10.lib a fin de usar SQL Server Native Client.

  • SQL Server Native Client no se admite desde el proveedor OLE DB de Microsoft para ODBC (MSDASQL). Si usa el controlador MDAC SQLODBC con MSDASQL o el controlador MDAC SQLODBC con ADO, use OLE DB en SQL Server Native Client.

  • Las cadenas de conexión de MDAC permiten un valor booleano (true) para la palabra clave Trusted_Connection. Una cadena de conexión de SQL Server debe usar yes o no.

  • Se han realizado pequeños cambios en los errores y advertencias. Ahora, los errores y advertencias que devuelve el servidor conservan la misma gravedad cuando se pasan a SQL Server Native Client. Debe asegurarse de que ha probado de forma exhaustiva la aplicación si depende de la interceptación de determinados errores y advertencias.

  • SQL Server Native Client dispone de un sistema de comprobación de errores más estricto que MDAC, lo que significa que algunas aplicaciones que no se ajustan estrictamente a las especificaciones OLE DB y ODBC pueden comportarse de manera diferente. Por ejemplo, el proveedor SQLOLEDB no exigía la regla que indica que los nombres de parámetro deben comenzar por '@' para los parámetros de resultado, pero el proveedor OLE DB de SQL ServerNative Client sí que lo exige.

  • SQL Server Native Client se comporta de distinto modo que MDAC con respecto a las conexiones con errores. Por ejemplo, MDAC devuelve valores de propiedad almacenados en caché para una conexión con errores, mientras que SQL Server Native Client notifica un error a la aplicación que realiza la llamada.

  • SQL Server Native Client no genera eventos de Visual Studio Analyzer, sino que genera eventos de seguimiento de Windows.

  • SQL Server Native Client no puede usarse con perfmon. Perfmon es una herramienta de Windows que sólo puede utilizarse con los DSN que usan el controlador MDAC SQLODBC que se incluye con Windows.

  • Cuando SQL Server Native Client se conecta a SQL Server 2005, el error de servidor 16947 se devuelve como SQL_ERROR. Este error se produce cuando una actualización o eliminación posicionada genera errores al actualizar o eliminar una fila. Con SQL Server 2000 y versiones anteriores, así como con MDAC, al conectarse a cualquier versión de SQL Server, se devuelve el error de servidor 16947 como una advertencia (SQL_SUCCESS_WITH_INFO).

  • SQL Server Native Client implementa la interfaz IDBDataSourceAdmin, que es una interfaz OLE DB opcional que no se implementaba previamente, sino que sólo se implementaba el método CreateDataSource de esta interfaz opcional. Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

  • El proveedor OLE DB de SQL Server Native Client devuelve sinónimos en el conjunto de filas de esquema de TABLES y TABLE_INFO, con TABLE_TYPE establecido en SYNONYM.

  • Los valores devueltos de tipo varchar(max), nvarchar(max), varbinary(max), xml, udt u otros tipos de objetos grandes, no pueden devolverse en versiones de cliente anteriores a SQL Server 2005. Si desea usar estos tipos de datos como valores devueltos, debe usar SQL Server Native Client.

  • MDAC permite ejecutar las instrucciones siguientes al inicio de transacciones manuales e implícitas, mientras que SQL Server Native Client no. Deben ejecutarse en modo de confirmación automática.

    • Todas las operaciones de texto completo (índice y catálogo DDL)

    • Todas las operaciones de base de datos (crear base de datos, modificar base de datos, quitar base de datos)

    • Reconfigurar

    • Cerrar

    • Eliminar

    • Realizar copias de seguridad

  • Cuando las aplicaciones MDAC se conecten a SQL Server, los tipos de datos introducidos en SQL Server 2005 se mostrarán como tipos de datos compatibles con SQL Server 2000, tal y como se indica en la tabla siguiente.

    Tipo de SQL Server 2005

    Tipo de SQL Server 2000

    varchar(max)

    text

    nvarchar(max)

    ntext

    varbinary(max)

    image

    udt

    varbinary

    xml

    ntext

    Esta asignación de tipos afecta a los valores devueltos para los metadatos de columna. Por ejemplo, una columna text tiene un tamaño máximo de 2.147.483.647, pero ODBC de SQL Server Native Client notifica un tamaño máximo de columna varchar (max) de SQL_SS_LENGTH_UNLIMITED y OLE DB de SQL Server Native Client notifica un tamaño máximo de columna varchar (max) de 2.147.483.647 ó -1, en función de la plataforma.

  • SQL Server Native Client permite la ambigüedad en las cadenas de conexión por motivos de compatibilidad con versiones anteriores (por ejemplo, algunas palabras clave pueden especificarse más de una vez y pueden permitirse palabras clave en conflicto cuya resolución se base en la posición o en la prioridad). En futuras versiones de SQL Server Native Client no se permitirá la ambigüedad en las cadenas de conexión. Es recomendable modificar las aplicaciones a fin de usar SQL Server Native Client para eliminar cualquier dependencia de ambigüedad en las cadenas de conexión.

  • Si usa una llamada ODBC u OLE DB para iniciar las transacciones, existe una diferencia de comportamiento entre SQL Server Native Client y MDAC; las transacciones se iniciarán inmediatamente con SQL Server Native Client mientras que, con MDAC, las transacciones se iniciarán después del primer acceso a la base de datos. Esto puede afectar al comportamiento de procedimientos almacenados y lotes porque SQL Server exige que @@TRANCOUNT sea igual una vez que finaliza la ejecución de un procedimiento almacenado o lote que cuando se inició el lote o procedimiento almacenado. Para obtener más información, vea Revertir y confirmar acciones en procedimientos almacenados y desencadenadores.

  • Con SQL Server Native Client, ITransactionLocal::BeginTransaction hará que una transacción se inicie inmediatamente. Con MDAC, el inicio de transacciones se retrasa hasta que la aplicación ejecuta una instrucción que requiere una transacción en modo de transacción implícita. Para obtener más información, vea SET IMPLICIT_TRANSACTIONS (Transact-SQL).

  • Pueden producirse errores al usar el controlador de SQL Server Native Client con System.Data.Odbc para obtener acceso a un equipo servidor SQL Server que expone nuevos tipos de datos o funciones específicos de SQL Server. System.Data.Odbc proporciona una implementación genérica de ODBC y, posteriormente, no expone ninguna funcionalidad ni extensiones específicas del proveedor. (El controlador de SQL Server Native Client se ha actualizado para admitir de forma nativa las características más recientes de SQL Server.) Para solucionar este problema, puede volver a MDAC o migrar a System.Data.SqlClient.

Tanto SQL Server Native Client como MDAC admiten el aislamiento de transacción de lectura confirmada mediante el uso de versiones de fila, pero sólo SQL Server Native Client admite el aislamiento de transacción de instantánea. (En términos de programación, el aislamiento de transacción de lectura confirmada con versiones de fila es igual que la transacción de lectura confirmada.) Para obtener más información, vea Elegir niveles de aislamiento basado en el control de versión de filas.