Aracılığıyla paylaş


SQL Server için OLE DB Sürücüsü ile ADO Kullanma

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

OLE DB sürücüsünü indirme

SQL Server 2005 (9.x)'te getirilen çoklu aktif sonuç kümeleri (MARS), sorgu bildirimleri, kullanıcı tanımlı türler (UDT) veya yeni xml veri tipi gibi yeni özelliklerden yararlanmak için, ActiveX Veri Nesneleri (ADO) kullanan mevcut uygulamalar, veri erişim sağlayıcısı olarak SQL Server için OLE DB Sürücüsünü kullanmalıdır.

ADO'nun SQL Server'ın son sürümlerinin yeni özelliklerini kullanmasını sağlamak için, OLE DB Sürücüsü for SQL Server'da bazı iyileştirmeler yapıldı ve bu da OLE DB'nin temel özelliklerini genişletti. Bu geliştirmeler, ADO uygulamalarının daha yeni SQL Server özelliklerini kullanmasına ve SQL Server 2005 (9.x)'de tanıtılan iki veri tipini tüketmesine olanak tanır: xml ve udt. Bu geliştirmeler ayrıca varchar, nvarchar ve varbinary veri tiplerindeki iyileştirmelerden de yararlanır. SQL Server için OLE DB Sürücüsü, SSPROP_INIT_DATATYPECOMPATIBILITY başlatma özelliğini ADO uygulamaları tarafından kullanılmak üzere DBPROPSET_SQLSERVERDBINIT özellik setine ekler; böylece yeni veri türleri ADO ile uyumlu şekilde açığa çıkarılır. Ayrıca, SQL Server için OLE DB Sürücüsü, bağlantı dizisinde ayarlanan DataTypeCompatibility adlı yeni bir bağlantı dizisi anahtar kelimesi tanımlar.

Uyarı

Mevcut ADO uygulamaları, SQLOLEDB sağlayıcısını kullanarak XML, UDT ve büyük değerli metin ile ikili alan değerlerine erişebilir ve güncelleyebilmektedir. Yeni daha büyük varchar(max), nvarchar(max) ve varbinary(max) veri türleri sırasıyla adLongVarChar, adLongVarWChar ve adLongVarBinary olarak döndürülür. XML sütunları adLongVarChar olarak, UDT sütunları ise adVarBinary olarak döner. Ancak, SQLOLEDB yerine SQL Server için OLE DB Driver (MSOLEDBSQL19 veya MSOLEDBSQL) kullanıyorsanız, yeni veri tiplerinin ADO veri tiplerine doğru eşlemesi için DataTypeCompatibility anahtar kelimesini "80" olarak ayarladığınızdan emin olmalısınız.

ADO'dan SQL Server için OLE DB Sürücüsünü etkinleştirmek

SQL Server için OLE DB Sürücüsünün kullanılmasını mümkün kılmak için, ADO uygulamalarının bağlantı dizislerinde aşağıdaki anahtar kelimeleri uygulamaları gerekecektir:

  • Provider=MSOLEDBSQL19

  • DataTypeCompatibility=80

OLE DB Driver for SQL Server'da desteklenen ADO bağlantıları dizisi anahtar kelimeleri hakkında daha fazla bilgi için Bağlantı Dizisi Anahtar Kelimelerini SQL Server için OLE DB Sürücüsü ile Kullanılma'na bakınız.

Aşağıdaki kod, OLE DB Driver for SQL Server ile çalışmak üzere tamamen etkinleştirilmiş bir ADO bağlantı dizisi kurmanın örneğidir; MARS özelliğinin etkinleştirilmesi de dahildir:

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

Örnekler

Aşağıdaki bölümler, OLE DB Driver for SQL Server ile ADO'yu nasıl kullanabileceğinize dair örnekler sunmaktadır.

XML sütun verisinin alınması

Bu örnekte, bir kayıt seti, SQL Server AdventureWorks örnek veritabanındaki bir XML sütunundan veri almak ve görüntülemek için kullanılır.

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

Uyarı

Kayıt kümesi filtreleme XML sütunlarıyla desteklenmez. Kullanılırsa hata geri dönecektir.

UDT sütun verilerinin alınması

Bu örnekte, bir Command nesnesi bir SQL sorgusunu çalıştırmak için kullanılır; bu sorgu UDT döndürür, UDT veri güncellenir ve ardından yeni veri veritabanına geri eklenir. Bu örnek, Point UDT'nin zaten veritabanında kayıtlı olduğunu varsayar.

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

MARS'ı etkinleştirmek ve kullanmak

Bu örnekte, bağlantı dizisi SQL Server için OLE DB Sürücüsü aracılığıyla MARS'ı etkinleştirecek şekilde oluşturulmuş ve ardından aynı bağlantı kullanılarak çalıştırılacak iki kayıt seti nesnesi oluşturulur.

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

OLE DB sağlayıcısının önceki sürümlerinde, bu kod ikinci yürütmede örtük bir bağlantı oluşturulmasına neden olurdu çünkü tek bir bağlantı için yalnızca bir aktif sonuç seti açılabilirdi. Örtük bağlantı OLE veritabanı bağlantı havuzunda havuzlanmadığı için bu davranış ekstra yük yaratır. OLE DB Driver for SQL Server tarafından ortaya çıkarılan MARS özelliğiyle, tek bir bağlantıda birden fazla aktif sonuç elde ediyorsunuz.

Ayrıca bakınız

SQL Server için OLE DB Sürücüsü ile uygulama oluşturma