Menggunakan ADO dengan Driver OLE DB untuk SQL Server

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

Unduh driver OLE DB

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 menggunakan dua jenis data yang diperkenalkan di SQL Server 2005 (9.x): xml dan udt. Penyempurnaan ini juga mengeksploitasi peningkatan 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(max), nvarchar(max), dan varbinary(max) baru dikembalikan sebagai jenis ADO adLongVarChar, adLongVarWChar dan adLongVarBinary masing-masing. Kolom XML dikembalikan sebagai adLongVarChar, dan kolom 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 set 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 dieksekusi 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 penyedia OLE DB sebelumnya, 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.

Lihat juga

Membangun aplikasi dengan Driver OLE DB untuk SQL Server