Actualizar una aplicación a SQL Server Native Client desde MDAC

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). No se recomienda SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft heredado para SQL Server (SQLOLEDB) para el desarrollo de nuevas aplicaciones. Cambie al nuevo controlador OLE DB de Microsoft (MSOLEDBSQL) para SQL Server o al controlador ODBC de Microsoft ODBC Driver for SQL Server más reciente de ahora en adelante. Para SQLNCLI que se incluye como componente de motor de base de datos de SQL Server (versiones 2012 a 2019), consulte esta excepción de ciclo de vida de soporte técnico.

Hay varias diferencias entre SQL Server Native Client y Los componentes de Microsoft Data Access (MDAC; a partir de Windows Vista, los componentes de acceso a datos ahora se denominan Componentes de Windows Data Access o DAC de Windows). Aunque ambos proporcionan acceso nativo a las bases de datos de SQL Server, SQL Server Native Client se ha diseñado específicamente para exponer las nuevas características de SQL Server 2005 (9.x), mientras que al mismo tiempo se mantiene la compatibilidad con versiones anteriores.

La información de este tema ayuda a actualizar la aplicación MDAC (o DAC de Windows) para que esté actualizada con la versión de SQL Server Native Client que se incluyó en SQL Server 2005 (9.x). Para ayudarle a que esta aplicación esté actualizada con la versión de SQL Server Native Client que se incluye en SQL Server, consulte Actualización de una aplicación desde SQL Server 2005 Native Client.

Nota:

SQL Server Native Client se ha quitado de SQL Server 2022 (16.x).

Además, aunque MDAC contiene componentes para usar OBJETOS de datos OLE DB, ODBC y ActiveX (ADO), SQL Server Native Client solo implementa OLE DB y ODBC (aunque ADO puede acceder a la funcionalidad de SQL Server Native Client).

SQL Server Native Client y MDAC difieren en las otras áreas siguientes:

  • Los usuarios que usan ADO para acceder a un proveedor de SQL Server Native Client pueden encontrar menos funcionalidad de filtrado que cuando accedieron a un proveedor OLE DB de SQL.

  • Si una aplicación de 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.

  • Solo se admiten las interfaces ODBC y OLE DB.

  • Los nombres de proveedor OLE DB y controlador ODBC de SQL Server Native Client son diferentes de los usados con MDAC.

  • La funcionalidad accesible para el usuario proporcionada por los componentes MDAC está disponible al usar 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 usa cualquiera de estas características, SQL Server Native Client solo proporciona conectividad de base de datos. MDAC proporciona funciones como seguimiento, controles de administración y contadores de rendimiento.

  • Las aplicaciones pueden usar servicios principales de OLE DB con SQL Server Native Client, pero si usan el motor de cursorES OLE DB, deben usar la opción de compatibilidad de tipos de datos para evitar posibles problemas que puedan surgir porque el motor de cursor no tiene conocimiento de los nuevos tipos de datos de SQL Server 2005 (9.x).

  • SQL Server Native Client admite el acceso a bases de datos anteriores de SQL Server.

  • SQL Server Native Client no contiene integración XML. SQL Server Native Client admite SELECT ... Las consultas FOR XML, pero no admiten ninguna otra funcionalidad XML. Sin embargo, SQL Server Native Client admite el tipo de datos xml introducido en SQL Server 2005 (9.x).

  • SQL Server Native Client admite la configuración de bibliotecas de red del lado cliente con solo atributos 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 las API odbc y bcp deben volver a compilarse para vincularlas con sqlncli11.lib para poder usar SQL Server Native Client.

  • SQL Server Native Client no es compatible con el proveedor OLE DB de Microsoft para ODBC (MSDASQL). Si usa el controlador SQLODBC MDAC con el controlador MSDASQL o 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. Un cadena de conexión de SQL Server Native Client debe usar o no.

  • Se han realizado pequeños cambios en los errores y advertencias. Las advertencias y los errores devueltos por el servidor ahora 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 tiene una comprobación de errores más estricta que MDAC, lo que significa que algunas aplicaciones que no se ajustan estrictamente a las especificaciones ODBC y OLE DB pueden comportarse de forma diferente. Por ejemplo, el proveedor SQLOLEDB no aplicaba la regla que los nombres de parámetro deben comenzar con '@' para los parámetros de resultado, pero el proveedor OLE DB de SQL Server Native Client sí.

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

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

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

  • Cuando SQL Server Native Client está conectado a SQL Server 2005 (9.x) y versiones posteriores, el error de servidor 16947 se devuelve como un SQL_ERROR. Este error se produce cuando una actualización o eliminación posicionada genera errores al actualizar o eliminar una fila. 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 IDBDataSource Administración, que es una interfaz OLE DB opcional que no se implementó anteriormente, pero solo se implementa el método CreateDataSource de esta interfaz opcional. Esta característica se quitará en una versión futura de 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 los conjuntos de filas de esquema TABLES y TABLE_INFO, con TABLE_TYPE establecido en SYNONYM.

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

  • MDAC permite ejecutar las siguientes instrucciones al principio de las transacciones manuales e implícitas, pero SQL Server Native Client no lo hace. 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)

    • Volver a configurar

    • Shutdown

    • Terminar

    • Copia de seguridad

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

    Tipo de SQL Server 2005 Tipo de SQL Server 2000
    ntext 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 de texto tiene un tamaño máximo de 2.147.483.647, pero ODBC de SQL Server Native Client notifica el tamaño máximo de las columnas varchar(max) como SQL_SS_LENGTH_UNLIMITED y OLE DB de SQL Server Native Client notifica el tamaño máximo de las columnas varchar(max) como 2.147.483.647 o -1, según la plataforma.

  • SQL Server Native Client permite la ambigüedad en cadena de conexión s (por ejemplo, algunas palabras clave se pueden especificar más de una vez y se pueden permitir palabras clave en conflicto con la resolución en función de la posición o prioridad) por motivos de compatibilidad con versiones anteriores. Es posible que las versiones futuras de SQL Server Native Client no permitan ambigüedad en cadena de conexión. Se recomienda modificar las aplicaciones para que usen SQL Server Native Client para eliminar cualquier dependencia de cadena de conexión ambigüedad.

  • Si usa una llamada ODBC o OLE DB para iniciar transacciones, hay una diferencia en el comportamiento entre SQL Server Native Client y MDAC; las transacciones comenzarán inmediatamente con SQL Server Native Client, pero las transacciones comenzarán después del primer acceso a la base de datos mediante MDAC. Esto puede afectar al comportamiento de los procedimientos almacenados y los lotes porque SQL Server exige que @@TRANCOUNT sea igual una vez que finaliza la ejecución de un procedimiento almacenado o un lote que cuando se inició el lote o el procedimiento almacenado.

  • Con SQL Server Native Client, ITransactionLocal::BeginTransaction hará que se inicie inmediatamente una transacción. 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 más información, consulte SET IMPLICIT_TRANSACTIONS (Transact-SQL).

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

SQL Server Native Client y MDAC admiten el aislamiento de transacciones confirmadas de lectura mediante el control de versiones de fila, pero solo SQL Server Native Client admite el aislamiento de transacciones de instantáneas. (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.)

Consulte también

Generar aplicaciones con SQL Server Native Client