Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Untuk memanfaatkan fitur baru yang diperkenalkan di SQL Server 2005 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 OLE DB Klien Asli SQL Server sebagai penyedia akses data mereka.
Jika Anda tidak perlu menggunakan salah satu fitur baru yang diperkenalkan di SQL Server 2005, 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, Anda harus menggunakan penyedia SQL Server Native Client OLE DB.
Nota
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 menggunakan fitur SQL Server yang lebih baru dan menggunakan dua jenis data yang diperkenalkan di SQL Server 2005: 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.
Nota
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 DataTypeCompatibility kata kunci 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=SQLNCLI11DataTypeCompatibility=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
Nota
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.