SQL Server Native Client ile ADO'yu Kullanmak

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform System (PDW)

Important

SQL Server Native Client (SNAC) ile birlikte gönderilmez:

  • SQL Server 2022 (16.x) ve sonraki sürümleri
  • SQL Server Management Studio 19 ve sonraki sürümleri

YENI uygulama geliştirme için SQL Server Yerel İstemcisi (SQLNCLI veya SQLNCLI11) ve SQL Server için eski Microsoft OLE DB Sağlayıcısı (SQLOLEDB) önerilmez.

Yeni projeler için aşağıdaki sürücülerden birini kullanın:

SQL Server Veritabanı Altyapısı'nın (sürüm 2012 ile 2019 arasında) bir bileşeni olarak gelen SQLNCLI için, Destek Yaşam Döngüsü özel durumukonusuna bakın.

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

SQL Server 2005 (9.x)'de tanıtılan yeni özelliklerden hiçbirini kullanmanız gerekmiyorsa, SQL Server Native Client OLE veritabanı sağlayıcısını kullanmanıza gerek yoktur; mevcut veri erişim sağlayıcınızı kullanmaya devam edebilirsiniz; genellikle SQLOLEDB olan mevcut veri erişim sağlayıcınız. Mevcut bir uygulamayı geliştiriyorsanız ve SQL Server 2005 (9.x)'de tanıtılan yeni özellikleri kullanmanız gerekiyorsa, SQL Server Native Client OLE DB sağlayıcısını kullanmalısınız.

Note

Yeni bir uygulama geliştiriyorsanız, ADO.NET ve .NET Framework Veri Sağlayıcısı SQL Server SQL Server yerine SQL Server sürümlerinin tüm yeni özelliklerine erişmek için Native Client yerine kullanmanız önerilir. .NET Framework Veri Sağlayıcısı for SQL Server hakkında daha fazla bilgi için ADO.NET için .NET Framework SDK dokümantasyonuna bakınız.

ADO'nun son SQL Server sürümlerinin yeni özelliklerini kullanmasını sağlamak için, SQL Server Native Client OLE DB sağlayıcısında 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 Native Client, 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 görünür. Ayrıca, SQL Server Native Client OLE DB sağlayıcısı, bağlantı dizesi'de ayarlanan DataTypeCompatibility adlı yeni bir bağlantı dizesi anahtar kelimesi de tanımlar.

Note

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 Native Client OLE DB sağlayıcısını (SQLNCLI11) kullanıyorsanız, yeni veri türlerinin 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 Yerel İstemciyi etkinleştirmek

SQL Server Native Client kullanımını mümkün kılmak için, ADO uygulamalarının bağlantı dizislerinde aşağıdaki anahtar kelimeleri uygulamaları gerekecektir:

  • Provider=SQLNCLI11

  • DataTypeCompatibility=80

SQL Server Native Client'ta desteklenen ADO bağlantıları dizisi anahtar kelimeleri hakkında daha fazla bilgi için bkz. SQL Server Native Client ile Bağlantı Dizisi Anahtar Kelimelerini Kullanmak.

Aşağıda, SQL Server Native Client ile çalışmak üzere tamamen etkinleştirilmiş bir ADO bağlantı dizesi kurma örneği verilmiştir; MARS özelliğinin etkinleştirilmesi de dahildir:

Dim con As New ADODB.Connection  
  
con.ConnectionString = "Provider=SQLNCLI11;" _  
         & "Server=(local);" _  
         & "Database=AdventureWorks;" _   
         & "Integrated Security=SSPI;" _  
         & "DataTypeCompatibility=80;" _  
         & "MARS Connection=True;"  
con.Open  

Examples

Aşağıdaki bölümler, SQL Server Native Client OLE DB sağlayıcısı ile ADO'yu nasıl kullanabileceğinize dair örnekler sunmaktadır.

XML Sütun Verilerinin 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=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  

Note

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=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  

MARS'ı etkinleştirmek ve kullanmak

Bu örnekte, bağlantı dizesi, SQL Server Native Client OLE DB sağlayıcısı aracılığıyla MARS'ı etkinleştirmek için oluşturulur 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=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  

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 DB bağlantı havuzunda havuzlanmadığı için ek yük oluşur. SQL Server Native Client OLE DB sağlayıcısının MARS özelliğiyle tek bir bağlantıda birden fazla aktif sonuç elde ediyorsunuz.