Использование ADO с SQL Server Native Client
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
Внимание
SQL Server Native Client (SNAC) не поставляется с:
- SQL Server 2022 (16.x) и более поздних версий
- SQL Server Management Studio 19 и более поздних версий
Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.
Для новых проектов используйте один из следующих драйверов:
Сведения о SQLNCLI, которые поставляется в качестве компонента SQL Server ядро СУБД (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.
Чтобы воспользоваться преимуществами новых функций, представленных в SQL Server 2005 (9.x), таких как несколько активных результирующих наборов (MARS), уведомлений запросов, определяемых пользователем типов (определяемых пользователем типов) или нового типа данных XML , существующие приложения, использующие объекты данных ActiveX (ADO), должны использовать поставщик OLE DB sql Server Native Client в качестве поставщика доступа к данным.
Если вам не нужно использовать какие-либо новые функции, представленные в SQL Server 2005 (9.x), не требуется использовать поставщик OLE DB собственного клиента SQL Server; Вы можете продолжать использовать текущий поставщик доступа к данным, который обычно является SQLOLEDB. Если вы улучшаете существующее приложение и хотите использовать новые функции, представленные в SQL Server 2005 (9.x), следует использовать поставщик OLE DB собственного клиента SQL Server.
Примечание.
При разработке нового приложения рекомендуется использовать ADO.NET и поставщик данных платформа .NET Framework для SQL Server вместо собственного клиента SQL Server, чтобы получить доступ ко всем новым функциям последних версий SQL Server. Дополнительные сведения о поставщике данных платформа .NET Framework для SQL Server см. в документации по пакету SDK платформа .NET Framework для ADO.NET.
Чтобы включить ADO для использования новых функций последних версий SQL Server, некоторые улучшения были добавлены в поставщик OLE DB собственного клиента SQL Server, который расширяет основные функции OLE DB. Эти улучшения позволяют приложениям ADO использовать новые функции SQL Server и использовать два типа данных, представленные в SQL Server 2005 (9.x): xml и udt. Эти улучшения также используют усовершенствования типов данных varchar, nvarchar и varbinary. SQL Server Native Client добавляет свойство инициализации SSPROP_INIT_DATATYPECOMPATIBILITY в набор свойств DBPROPSET_SQLSERVERDBINIT для использования приложениями ADO, чтобы новые типы данных были доступны таким образом, чтобы они были совместимы с ADO. Кроме того, поставщик OLE DB собственного клиента SQL Server также определяет новое ключевое слово строка подключения с именем DataTypeCompatibility, которое устанавливается в строка подключения.
Примечание.
Существующие приложения ADO могут обращаться к полям XML определяемых пользователем типов, текстовым полям больших значений и полям двоичных значений, а также обновлять их значения с помощью поставщика SQLOLEDB. Новые типы данных varchar(max), nvarchar(max) и varbinary(max) увеличенного размера возвращаются как типы ADO adLongVarChar, adLongVarWChar и adLongVarBinary соответственно. XML-столбцы возвращаются как adLongVarChar, а столбцы пользовательских типов возвращаются как adVarBinary. Однако если вы используете поставщик OLE DB собственного клиента SQL Server (SQLNCLI11) вместо SQLOLEDB, необходимо установить ключевое слово DataTypeCompatibility равным "80", чтобы новые типы данных правильно сопоставлялись с типами данных ADO.
Включение собственного клиента SQL Server из ADO
Чтобы включить использование собственного клиента SQL Server, приложения ADO должны реализовать следующие ключевые слова в своих строка подключения:
Provider=SQLNCLI11
DataTypeCompatibility=80
Дополнительные сведения о ключевых словах строки подключений ADO, поддерживаемых в собственном клиенте SQL Server, см. в разделе "Использование ключевых слов строки подключения" с собственным клиентом SQL Server.
Ниже приведен пример создания строка подключения ADO, который полностью включен для работы с собственным клиентом SQL Server, включая включение функции MARS:
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;" _
& "MARS Connection=True;"
con.Open
Примеры
В следующих разделах приведены примеры использования ADO с поставщиком OLE DB собственного клиента SQL Server.
Получение данных XML-столбца
В этом примере набор записей используется для извлечения и отображения данных из XML-столбца в примере базы данных SQL Server AdventureWorks .
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-столбцов не поддерживается. При попытке ее использования возвращается ошибка.
Получение данных столбца определяемого пользователем типа
В этом примере объект Command используется для выполнения запроса SQL, который возвращает пользовательский тип, после чего данные пользовательского типа обновляются и вставляются в базу данных. В этом примере предполагается, что пользовательский тип Point был заранее зарегистрирован в базе данных.
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
Включение и использование режима MARS
В этом примере строка подключения создается для включения MARS через поставщика OLE DB собственного клиента SQL Server, а затем создаются два объекта набора записей для выполнения с помощью одного подключения.
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 этот код вызвал бы создание неявного соединения при втором выполнении, так как в одном соединении можно было открыть только один активный набор результатов. Поскольку неявное соединение не включалось в пул соединений OLE DB, это вызывало дополнительные издержки. С помощью функции MARS, предоставляемой поставщиком OLE DB собственного клиента SQL Server, вы получите несколько активных результатов в одном подключении.
См. также
Построение приложений с использованием SQL Server Native Client