Menggunakan ADO dengan SQL Server Native Client
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Penting
SQL Server Native Client (SNAC) tidak dikirim dengan:
- SQL Server 2022 (16.x) dan versi yang lebih baru
- SQL Server Management Studio 19 dan versi yang lebih baru
SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru.
Untuk proyek baru, gunakan salah satu driver berikut:
Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.
Untuk memanfaatkan fitur baru yang diperkenalkan di SQL Server 2005 (9.x) seperti beberapa set hasil aktif (MARS), pemberitahuan kueri, jenis yang ditentukan pengguna (UDT), atau jenis data xml baru, aplikasi yang ada yang menggunakan Objek Data ActiveX (ADO) harus menggunakan penyedia SQL Server Native Client OLE DB sebagai penyedia akses data mereka.
Jika Anda tidak perlu menggunakan salah satu fitur baru yang diperkenalkan di SQL Server 2005 (9.x), tidak perlu menggunakan penyedia SQL Server Native Client OLE DB; Anda dapat terus menggunakan penyedia akses data Anda saat ini, yang biasanya SQLOLEDB. Jika Anda meningkatkan aplikasi yang ada dan Anda perlu menggunakan fitur baru yang diperkenalkan di SQL Server 2005 (9.x), Anda harus menggunakan penyedia SQL Server Native Client OLE DB.
Catatan
Jika Anda mengembangkan aplikasi baru, disarankan agar Anda mempertimbangkan untuk menggunakan ADO.NET dan Penyedia Data .NET Framework untuk SQL Server alih-alih SQL Server Native Client untuk mengakses semua fitur baru versi SQL Server terbaru. Untuk informasi selengkapnya tentang Penyedia Data .NET Framework untuk SQL Server, lihat dokumentasi .NET Framework SDK untuk ADO.NET.
Untuk memungkinkan ADO menggunakan fitur baru versi terbaru SQL Server, beberapa penyempurnaan telah dilakukan ke penyedia SQL Server Native Client OLE DB yang memperluas fitur inti OLE DB. Penyempurnaan ini memungkinkan aplikasi ADO untuk menggunakan fitur SQL Server yang lebih baru dan untuk menggunakan dua jenis data yang diperkenalkan di SQL Server 2005 (9.x): xml dan udt. Penyempurnaan ini juga mengeksploitasi peningkatan pada jenis data varchar, nvarchar, dan varbinary . SQL Server Native Client menambahkan properti inisialisasi SSPROP_INIT_DATATYPECOMPATIBILITY ke properti DBPROPSET_SQLSERVERDBINIT yang ditetapkan untuk digunakan oleh aplikasi ADO sehingga jenis data baru diekspos dengan cara yang kompatibel dengan ADO. Selain itu, penyedia SQL Server Native Client OLE DB juga mendefinisikan kata kunci string koneksi baru bernama DataTypeCompatibility yang diatur dalam string koneksi.
Catatan
Aplikasi ADO yang ada dapat mengakses dan memperbarui XML, UDT, dan nilai teks bernilai besar dan nilai bidang biner menggunakan penyedia SQLOLEDB. Jenis data varchar(maks) yang lebih besar, nvarchar(maks), dan varbinary(maks) baru dikembalikan sebagai jenis ADO adLongVarChar, adLongVarWChar, dan adLongVarBinary masing-masing. Kolom XML dikembalikan sebagai kolom adLongVarChar, dan UDT dikembalikan sebagai adVarBinary. Namun, jika Anda menggunakan penyedia SQL Server Native Client OLE DB (SQLNCLI11) alih-alih SQLOLEDB, Anda perlu memastikan untuk mengatur kata kunci DataTypeCompatibility ke "80" sehingga jenis data baru akan memetakan dengan benar ke jenis data ADO.
Mengaktifkan SQL Server Native Client dari ADO
Untuk mengaktifkan penggunaan SQL Server Native Client, aplikasi ADO harus menerapkan kata kunci berikut dalam string koneksi mereka:
Provider=SQLNCLI11
DataTypeCompatibility=80
Untuk informasi selengkapnya tentang kata kunci string koneksi ADO yang didukung di Klien Asli SQL Server, lihat Menggunakan Kata Kunci String Koneksi dengan Klien Asli SQL Server.
Berikut ini adalah contoh pembuatan string koneksi ADO yang sepenuhnya diaktifkan untuk bekerja dengan SQL Server Native Client, termasuk pengaktifan fitur 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
Contoh
Bagian berikut memberikan contoh bagaimana Anda dapat menggunakan ADO dengan penyedia SQL Server Native Client OLE DB.
Mengambil Data Kolom XML
Dalam contoh ini, kumpulan rekaman digunakan untuk mengambil dan menampilkan data dari kolom XML di database sampel 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
Catatan
Pemfilteran kumpulan rekaman tidak didukung dengan kolom XML. Jika digunakan, kesalahan akan dikembalikan.
Mengambil Data Kolom UDT
Dalam contoh ini, objek Perintah digunakan untuk menjalankan kueri SQL yang mengembalikan UDT, data UDT diperbarui, lalu data baru dimasukkan kembali ke database. Contoh ini mengasumsikan bahwa Point UDT telah terdaftar dalam 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
Mengaktifkan dan Menggunakan MARS
Dalam contoh ini, string koneksi dibangun untuk mengaktifkan MARS melalui penyedia SQL Server Native Client OLE DB, lalu dua objek recordset dibuat untuk dijalankan menggunakan koneksi yang sama.
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
Dalam versi sebelumnya dari penyedia OLE DB, kode ini akan menyebabkan koneksi implisit dibuat pada eksekusi kedua karena hanya satu set hasil aktif yang dapat dibuka per satu koneksi. Karena koneksi implisit tidak dikumpulkan di kumpulan koneksi OLE DB, ini akan menyebabkan overhead tambahan. Dengan fitur MARS yang diekspos oleh penyedia SQL Server Native Client OLE DB, Anda mendapatkan beberapa hasil aktif pada satu koneksi.