Menggunakan ADO dengan SQL Server Native Client

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penting

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server atau Microsoft ODBC Driver terbaru untuk SQL Server ke depannya. 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 menentukan 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 dipetakan 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.

Lihat Juga

Membangun Aplikasi dengan SQL Server Native Client