Usar ADO con SQL Server Native ClientUsing ADO with SQL Server Native Client

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Para aprovechar las nuevas características introducidas en SQL Server 2005 (9.x)SQL Server 2005 (9.x) como conjuntos de resultados activos múltiples (MARS), las notificaciones de consulta, tipos definidos por el usuario (UDT) o el nuevo xml tipo de datos, las aplicaciones existentes que utilizan controles ActiveX Objetos de datos (ADO) debe usar el SQL ServerSQL Server proveedor OLE DB de Native Client como su proveedor de acceso a datos.In order to take advantage of new features introduced in SQL Server 2005 (9.x)SQL Server 2005 (9.x) such as multiple active result sets (MARS), query notifications, user-defined types (UDTs), or the new xml data type, existing applications that use ActiveX Data Objects (ADO) should use the SQL ServerSQL Server Native Client OLE DB provider as their data access provider.

Si no necesita usar ninguna de las características nuevas introducidas en SQL Server 2005 (9.x)SQL Server 2005 (9.x), no tiene necesidad de usar el proveedor OLE DB de SQL ServerSQL Server Native Client; puede seguir usando su proveedor de acceso a datos actual, que suele ser SQLOLEDB.If you do not need to use any of the new features introduced in SQL Server 2005 (9.x)SQL Server 2005 (9.x), there is no need to use the SQL ServerSQL Server Native Client OLE DB provider; you can continue using your current data access provider, which is typically SQLOLEDB. Si está mejorando una aplicación existente y necesita usar las características nuevas introducidas en SQL Server 2005 (9.x)SQL Server 2005 (9.x), debería utilizar el proveedor OLE DB de SQL ServerSQL Server Native Client.If you are enhancing an existing application and you need to use the new features introduced in SQL Server 2005 (9.x)SQL Server 2005 (9.x), you should use SQL ServerSQL Server Native Client OLE DB provider.

Nota

Si está desarrollando una nueva aplicación, es recomendable que considere la posibilidad de usar ADO.NET y el proveedor de datos de .NET Framework para SQL ServerSQL Server en lugar de SQL ServerSQL Server Native Client a fin de obtener acceso a todas las características nuevas de las versiones más recientes de SQL ServerSQL Server.If you are developing a new application, it is recommended that you consider using ADO.NET and the .NET Framework Data Provider for SQL ServerSQL Server instead of SQL ServerSQL Server Native Client to access all the new features of recent versions of SQL ServerSQL Server. Para obtener más información acerca del proveedor de datos de .NET Framework para SQL ServerSQL Server, vea la documentación de .NET Framework SDK para ADO.NET.For more information about the .NET Framework Data Provider for SQL ServerSQL Server, see the .NET Framework SDK documentation for ADO.NET.

Para permitir que ADO utilice las características nuevas de las versiones más recientes de SQL ServerSQL Server, se han realizado algunas mejoras en el proveedor OLE DB de SQL ServerSQL Server Native Client que extiende las características principales de OLE DB.To enable ADO to use new features of recent versions of SQL ServerSQL Server, some enhancements have been made to the SQL ServerSQL Server Native Client OLE DB provider which extends the core features of OLE DB. Estas mejoras permiten a las aplicaciones ADO usar las características más recientes de SQL ServerSQL Server y usar dos tipos de datos introducidos en SQL Server 2005 (9.x)SQL Server 2005 (9.x): xml y udt.These enhancements allow ADO applications to use newer SQL ServerSQL Server features and to consume two data types introduced in SQL Server 2005 (9.x)SQL Server 2005 (9.x): xml and udt. Estas mejoras también aprovechan las mejoras realizadas en los tipos de datos varchar, nvarchar y varbinary.These enhancements also exploit enhancements to the varchar, nvarchar, and varbinary data types. SQL ServerSQL Server Native Client agrega la propiedad de inicialización SSPROP_INIT_DATATYPECOMPATIBILITY de propiedades DBPROPSET_SQLSERVERDBINIT para su uso por las aplicaciones ADO para que los nuevos tipos de datos se expongan en un modo compatible con ADO.Native Client adds the SSPROP_INIT_DATATYPECOMPATIBILITY initialization property to the DBPROPSET_SQLSERVERDBINIT property set for use by ADO applications so that the new data types are exposed in a way compatible with ADO. Además, el SQL ServerSQL Server proveedor OLE DB de Native Client también define una nueva palabra clave de conexión denominada DataTypeCompatibility que se establece en la cadena de conexión.In addition, the SQL ServerSQL Server Native Client OLE DB provider also defines a new connection string keyword named DataTypeCompatibility that is set in the connection string.

Nota

Las aplicaciones ADO existentes pueden obtener acceso y actualizar XML, UDT, texto de valores grandes y valores de campo binarios mediante el proveedor SQLOLEDB.Existing ADO applications can access and update XML, UDT, and large value text and binary field values using the SQLOLEDB provider. Los nuevos tipos de datos de mayor tamaño varchar(max) , nvarchar(max) y varbinary(max) se devuelven como los tipos ADO adLongVarChar, adLongVarWChar y adLongVarBinary respectivamente.The new larger varchar(max), nvarchar(max), and varbinary(max) data types are returned as the ADO types adLongVarChar, adLongVarWChar and adLongVarBinary respectively. Las columnas XML se devuelven como adLongVarChar y las columnas UDT se devuelven como adVarBinary.XML columns are returned as adLongVarChar, and UDT columns are returned as adVarBinary. Sin embargo, si usa el SQL ServerSQL Server el proveedor OLE DB de Native Client (SQLNCLI11) en lugar de SQLOLEDB, deberá asegurarse de que establecer el DataTypeCompatibility palabra clave en "80" para que los nuevos tipos de datos se asignen correctamente a los datos de ADO tipos.However, if you use the SQL ServerSQL Server Native Client OLE DB provider (SQLNCLI11) instead of SQLOLEDB, you need to make sure to set the DataTypeCompatibility keyword to "80" so that the new data types will map correctly to the ADO data types.

Habilitar SQL Server Native Client desde ADOEnabling SQL Server Native Client from ADO

Para habilitar el uso de SQL ServerSQL Server Native Client, las aplicaciones ADO necesitarán implementar las siguientes palabras clave en sus cadenas de conexión:To enable the usage of SQL ServerSQL Server Native Client, ADO applications will need to implement the following keywords in their connection strings:

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

Para obtener más información acerca de la propiedad ADO palabras clave admitidas en la cadena de conexión SQL ServerSQL Server Native Client, vea Using Connection String Keywords with SQL Server Native Client.For more information about the ADO connections string keywords supported in SQL ServerSQL Server Native Client, see Using Connection String Keywords with SQL Server Native Client.

El siguiente es un ejemplo del establecimiento de una cadena de conexión de ADO totalmente habilitada para trabajar con SQL ServerSQL Server Native Client, incluida la habilitación de la característica MARS:The following is an example of establishing an ADO connection string that is fully enabled to work with SQL ServerSQL Server Native Client, including the enabling of the MARS feature:

Dim con As New ADODB.Connection  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "Integrated Security=SSPI;" _  
         & "DataTypeCompatibility=80;" _  
         & "MARS Connection=True;"  
con.Open  

EjemplosExamples

Las secciones siguientes proporcionan ejemplos de cómo usar ADO con el SQL ServerSQL Server proveedor Native Client OLE DB.The following sections provide examples of how you can use ADO with the SQL ServerSQL Server Native Client OLE DB provider.

Recuperar datos de columna XMLRetrieving XML Column Data

En este ejemplo, se usa un conjunto de registros para recuperar y mostrar los datos de una columna XML en la base de datos de ejemplo AdventureWorks de SQL ServerSQL Server.In this example, a recordset is used to retrieve and display the data from an XML column in the SQL ServerSQL Server AdventureWorks sample database.

Dim con As New ADODB.Connection  
Dim rst As New ADODB.Recordset  
Dim sXMLResult As String  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "Integrated Security=SSPI;" _   
         & "DataTypeCompatibility=80;"  
  
con.Open  
  
' Get the xml data as a recordset.  
Set rst.ActiveConnection = con  
rst.Source = "SELECT AdditionalContactInfo FROM Person.Contact " _  
   & "WHERE AdditionalContactInfo IS NOT NULL"  
rst.Open  
  
' Display the data in the recordset.  
While (Not rst.EOF)  
   sXMLResult = rst.Fields("AdditionalContactInfo").Value  
   Debug.Print (sXMLResult)  
   rst.MoveNext  
End While  
  
con.Close  
Set con = Nothing  

Nota

No se admite el filtrado de conjuntos de registros con columnas XML.Recordset filtering is not supported with XML columns. Si se utiliza, se devolverá un error.If used, an error will be returned.

Recuperar datos de columna UDTRetrieving UDT Column Data

En este ejemplo, se usa un objeto Command para ejecutar una consulta SQL que devuelve un UDT, los datos del UDT se actualizan y, después, los nuevos datos vuelven a insertarse en la base de datos.In this example, a Command object is used to execute a SQL query that returns a UDT, the UDT data is updated, and then the new data is inserted back into the database. En este ejemplo, se asume que el UDT Point ya se ha registrado en la base de datos.This example assumes that the Point UDT has already been registered in the database.

Dim con As New ADODB.Connection  
Dim cmd As New ADODB.Command  
Dim rst As New ADODB.Recordset  
Dim strOldUDT As String  
Dim strNewUDT As String  
Dim aryTempUDT() As String  
Dim strTempID As String  
Dim i As Integer  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "Integrated Security=SSPI;" _  
         & "DataTypeCompatibility=80;"  
  
con.Open  
  
' Get the UDT value.  
Set cmd.ActiveConnection = con  
cmd.CommandText = "SELECT ID, Pnt FROM dbo.Points.ToString()"  
Set rst = cmd.Execute  
strTempID = rst.Fields(0).Value  
strOldUDT = rst.Fields(1).Value  
  
' Do something with the UDT by adding i to each point.  
arytempUDT = Split(strOldUDT, ",")  
i = 3  
strNewUDT = LTrim(Str(Int(aryTempUDT(0)) + i)) + "," + _  
   LTrim(Str(Int(aryTempUDT(1)) + i))  
  
' Insert the new value back into the database.  
cmd.CommandText = "UPDATE dbo.Points SET Pnt = '" + strNewUDT + _  
   "' WHERE ID = '" + strTempID + "'"  
cmd.Execute  
  
con.Close  
Set con = Nothing  

Habilitar y utilizar MARSEnabling and Using MARS

En este ejemplo, se construye la cadena de conexión para habilitar MARS a través de la SQL ServerSQL Server proveedor Native Client OLE DB y, a continuación, dos objetos de conjunto de registros se crean para ejecutar con la misma conexión.In this example, the connection string is constructed to enable MARS through the SQL ServerSQL Server Native Client OLE DB provider, and then two recordset objects are created to execute using the same connection.

Dim con As New ADODB.Connection  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "Integrated Security=SSPI;" _  
         & "DataTypeCompatibility=80;" _  
         & "MARS Connection=True;"  
con.Open  
  
Dim recordset1 As New ADODB.Recordset  
Dim recordset2 As New ADODB.Recordset  
  
Dim recordsaffected As Integer  
Set recordset1 =  con.Execute("SELECT * FROM Table1", recordsaffected, adCmdText)  
Set recordset2 =  con.Execute("SELECT * FROM Table2", recordsaffected, adCmdText)  
  
con.Close  
Set con = Nothing  

En versiones anteriores del proveedor OLE DB, este código hacía que se crease una conexión implícita en la segunda ejecución porque solo podía abrirse un conjunto de resultados activo por cada conexión única.In prior versions of the OLE DB provider, this code would cause an implicit connection to be created on the second execution because only one active set of results could be opened per a single connection. Dado que la conexión implícita no estaba agrupada en el grupo de conexiones OLE DB, esto produciría una sobrecarga adicional.Because the implicit connection was not pooled in the OLE DB connection pool this would cause additional overhead. Con la característica MARS expuesta por el SQL ServerSQL Server proveedor OLE DB de Native Client, se obtienen varios resultados activos en la única conexión.With the MARS feature exposed by the SQL ServerSQL Server Native Client OLE DB provider, you get multiple active results on the one connection.

Vea tambiénSee Also

Generar aplicaciones con SQL Server Native ClientBuilding Applications with SQL Server Native Client