Menggunakan ADO dengan Driver OLE DB untuk SQL Server
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
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 Driver OLE DB untuk SQL Server sebagai penyedia akses data mereka.
Untuk memungkinkan ADO menggunakan fitur baru versi terbaru SQL Server, beberapa penyempurnaan telah dilakukan pada Driver OLE DB untuk SQL Server, 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 . Driver OLE DB untuk SQL Server 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, Driver OLE DB untuk SQL Server 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 Driver OLE DB untuk SQL Server (MSOLEDBSQL19 atau MSOLEDBSQL) 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 Driver OLE DB untuk SQL Server dari ADO
Untuk mengaktifkan penggunaan Driver OLE DB untuk SQL Server, aplikasi ADO harus menerapkan kata kunci berikut dalam string koneksi mereka:
Provider=MSOLEDBSQL19
DataTypeCompatibility=80
Untuk informasi selengkapnya tentang kata kunci string koneksi ADO yang didukung di Driver OLE DB untuk SQL Server, lihat Menggunakan Kata Kunci String Koneksi dengan Driver OLE DB untuk SQL Server.
Kode berikut adalah contoh pembuatan string koneksi ADO yang sepenuhnya diaktifkan untuk bekerja dengan Driver OLE DB untuk SQL Server, termasuk pengaktifan fitur MARS:
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;" _
& "MARS Connection=True;"
con.Open
Contoh
Bagian berikut memberikan contoh bagaimana Anda dapat menggunakan ADO dengan Driver OLE DB untuk SQL Server.
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=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "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=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "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 Driver OLE DB untuk SQL Server, lalu dua objek recordset dibuat untuk dijalankan menggunakan koneksi yang sama.
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=MSOLEDBSQL19;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Use Encryption for Data=Optional;" _
& "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, perilaku ini akan menyebabkan overhead ekstra. Dengan fitur MARS yang diekspos oleh Driver OLE DB untuk SQL Server, Anda mendapatkan beberapa hasil aktif pada satu koneksi.