Использование ADO с собственным клиентом SQL ServerUsing ADO with SQL Server Native Client

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

Чтобы воспользоваться преимуществами новых функций, появившихся в SQL Server 2005 (9.x)SQL Server 2005 (9.x) таких случаях, как режим MARS, уведомления о запросах, определяемые пользователем типы (UDT) или новый тип данных XML , существующие приложения, ИСПОЛЬЗУЮЩИЕ объекты данных ActiveX (ADO), должны использовать SQL ServerSQL Server поставщик собственного клиента OLE DB в качестве поставщика доступа к данным.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.

Если применение новых функций SQL Server 2005 (9.x)SQL Server 2005 (9.x) не требуется, то можно не использовать поставщик OLE DB для собственного клиента SQL ServerSQL Server, а продолжать работу с текущим поставщиком доступа к данным (обычно это 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. Если производится улучшение существующего приложения и необходимо задействовать новые функции SQL Server 2005 (9.x)SQL Server 2005 (9.x), следует использовать поставщик OLE DB для собственного клиента SQL ServerSQL Server.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.

Примечание

Если проектируется новое приложение, рекомендуется использовать ADO.NET и поставщик данных .NET Framework для SQL ServerSQL Server вместо собственного клиента SQL ServerSQL Server для доступа ко всем новым функциям последних версий 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. Дополнительные сведения о поставщике данных .NET Framework для SQL ServerSQL Server см. в документации по пакету SDK платформы .NET Framework для ADO.NET.For more information about the .NET Framework Data Provider for SQL ServerSQL Server, see the .NET Framework SDK documentation for ADO.NET.

Чтобы позволить ADO использовать новые возможности последних версий SQL ServerSQL Server, были внесены некоторые улучшения в поставщик OLE DB для собственного клиента SQL ServerSQL Server, расширяющие базовую функциональность 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. Эти улучшения позволяют приложениям ADO использовать новые возможности SQL ServerSQL Server и применять два типа данных, появившихся в SQL Server 2005 (9.x)SQL Server 2005 (9.x): xml и 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. Эти улучшения также используют усовершенствования типов данных varchar, nvarchar и varbinary.These enhancements also exploit enhancements to the varchar, nvarchar, and varbinary data types. SQL ServerSQL ServerСобственный клиент добавляет свойство инициализации SSPROP_INIT_DATATYPECOMPATIBILITY к свойству DBPROPSET_SQLSERVERDBINIT, заданному для использования приложениями ADO, чтобы новые типы данных были предоставлены в виде совместимости с 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. Кроме SQL ServerSQL Server того, поставщик собственного клиента OLE DB также определяет новое ключевое слово строки подключения с именем DataTypeCompatibility диспетчера соединений , заданное в строке подключения.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.

Примечание

Существующие приложения ADO могут обращаться к полям XML определяемых пользователем типов, текстовым полям больших значений и полям двоичных значений, а также обновлять их значения с помощью поставщика SQLOLEDB.Existing ADO applications can access and update XML, UDT, and large value text and binary field values using the SQLOLEDB provider. Новые типы данных varchar(max) , nvarchar(max) и varbinary(max) увеличенного размера возвращаются как типы ADO adLongVarChar, adLongVarWChar и adLongVarBinary соответственно.The new larger varchar(max), nvarchar(max), and varbinary(max) data types are returned as the ADO types adLongVarChar, adLongVarWChar and adLongVarBinary respectively. XML-столбцы возвращаются как adLongVarChar, а столбцы пользовательских типов возвращаются как adVarBinary.XML columns are returned as adLongVarChar, and UDT columns are returned as adVarBinary. Однако при использовании SQL ServerSQL Server собственного клиента OLE DB Provider (SQLNCLI11) вместо SQLOLEDB необходимо обязательно задать для ключевого слова DataTypeCompatibility диспетчера соединений значение "80", чтобы новые типы данных правильно сопоставлялись с типами данных ADO.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.

Включение собственного клиента SQL Server из ADOEnabling SQL Server Native Client from ADO

Чтобы включить использование SQL ServerSQL Server собственного клиента, ПРИЛОЖЕНИЯМ ADO потребуется реализовать следующие ключевые слова в строках подключения: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

Дополнительные сведения о ключевых словах строки подключения ADO, поддерживаемых в SQL ServerSQL Server собственном клиенте, см. в разделе Использование ключевых слов строки подключения с 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.

Ниже приведен пример установки строки подключения ADO, которая полностью включена для работы с SQL ServerSQL Server собственным клиентом, включая включение функции 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  

ПримерыExamples

В следующих разделах приведены примеры использования ADO с SQL ServerSQL Server поставщиком собственного клиента OLE DB.The following sections provide examples of how you can use ADO with the SQL ServerSQL Server Native Client OLE DB provider.

Получение данных XML-столбцаRetrieving XML Column Data

В этом примере набор записей используется для извлечения и отображения данных из XML-столбца в тестовой базе данных SQL ServerSQL Server AdventureWorks.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  

Примечание

Фильтрация наборов записей для XML-столбцов не поддерживается.Recordset filtering is not supported with XML columns. При попытке ее использования возвращается ошибка.If used, an error will be returned.

Получение данных столбца определяемого пользователем типаRetrieving UDT Column Data

В этом примере объект Command используется для выполнения запроса SQL, который возвращает пользовательский тип, после чего данные пользовательского типа обновляются и вставляются в базу данных.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. В этом примере предполагается, что пользовательский тип Point был заранее зарегистрирован в базе данных.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  

Включение и использование режима MARSEnabling and Using MARS

В этом примере строка подключения создается для включения режима MARS с помощью SQL ServerSQL Server собственного клиента OLE DB Provider, а затем создаются два объекта набора записей для выполнения с использованием одного и того же соединения.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  

В предыдущих версиях поставщика OLE DB этот код вызвал бы создание неявного соединения при втором выполнении, так как в одном соединении можно было открыть только один активный набор результатов.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. Поскольку неявное соединение не включалось в пул соединений OLE DB, это вызывало дополнительные издержки.Because the implicit connection was not pooled in the OLE DB connection pool this would cause additional overhead. С помощью функции MARS, предоставляемой SQL ServerSQL Server поставщиком собственного клиента OLE DB, вы получаете несколько активных результатов для одного соединения.With the MARS feature exposed by the SQL ServerSQL Server Native Client OLE DB provider, you get multiple active results on the one connection.

См. также:See Also

Построение приложений с использованием SQL Server Native ClientBuilding Applications with SQL Server Native Client