.NET veri sağlayıcısı yükleme denetimi

Microsoft .NET'te .NET sağlayıcılarını kullanırken, uygulamalarınızla sorunsuz tümleştirme için çeşitli bileşenleri ve bunların bağımlılıklarını anlamak çok önemlidir. Bu makalede.NET sağlayıcılarının temel yönleri, varsayılan arama yolları ve sorun giderme yönergeleri özetlenmiştir.

Not

Bu makalede .NET Core yüklemeleri ele alınmıyor.

Microsoft .NET veri sağlayıcıları

Microsoft .NET, .NET Framework ile birlikte gönderilen dört veri sağlayıcısı içerir:

  • System.Data.SqlClient
  • System.Data.Odbc
  • System.Data.OleDb
  • System.Data.OracleClient

İlk üçü System.Data.DLL ve sonuncusu da System.Data.OracleClient.DLL içinde yer alır. Uygulama oluştururken, projenize yalnızca uygun DLL'ye ("derleme" olarak da bilinir) başvuru eklemeniz gerekir ve ardından sağlayıcıyı kullanabilirsiniz.

System.Data.SqlClient, SQL Yerel İstemcisi'ne benzer bir uygulama kodu içerir ve OLE DB veya ODBC API'lerine hiç güvenmez.

System.Data.Odbc ve System.Data.OleDb , herhangi bir doğal veritabanı işlevi sağlamaz. Bunun yerine sırasıyla ODBC sürücülerini ve OLE DB sağlayıcılarını yükler.

System.Data.OracleClient da uygulama kodu içerir, ancak Oracle ODBC sürücüleri ve OLE DB sağlayıcıları gibi, oracle client software veya yüklenecek Oracle Data Access Components (ODAC) yazılımına da dayanır.

Not

Genel olarak, eski sürücülerin daha güncel olma olasılığı yüksek olduğundan, Microsoft uygulamaları yerine Oracle tarafından sağlanan sürücüleri kullanmanız önerilir. Bir Microsoft sürücü uygulamasından Oracle sağlayıcısına geçiş yaparak bir sorun çözülebiliyorsa, tercih edilen bir çözüm olacaktır.

Varsayılan .NET arama yolu

ODBC sürücülerini ve OLE DB sağlayıcılarını yüklemenin aksine, .NET veri sağlayıcıları kayıt defterine güvenmez. Bunun yerine, .NET yükleyicisi aşağıdaki gibi açıklanan bir arama buluşsalını kullanır:

  1. Ortam DEVPATH değişkeni paylaşılan klasör için denetlendi. Bunu yalnızca paylaşılan derlemeler geliştirirken kullanmalısınız. Geliştirme tamamlandıktan sonra derlemenin Genel Derleme Önbelleği'ne (GAC) yüklenmesi gerekir.
  2. GaC, derlemenin uygulamalar arasında paylaşılıp paylaşılmadığını görmek için denetlendi. Derleme GAC'de değilse, özel bir derlemedir.
  3. Uygulama veya web yapılandırma dosyasının bir öğesi varsa, href özniteliği derlemenin bildirimini içeren dosyanın adını ve mutlak yolunu verir.
  4. Uygulamanın yüklü olduğu klasör denetlendi.
  5. Uygulama klasöründe derlemenin bildirimini içeren dosyayla aynı ada sahip bir alt klasör denetlendi.
  6. Yapılandırma dosyasında bir öğe varsa, privatePath özniteliği uygulama klasörü altında aranacak bir veya daha fazla alt klasörün adını verir.

Arama buluşsal bir genel DLL yükleme algoritmasıdır. Yerleşik .NET sağlayıcılarını kullanarak DLL neredeyse her zaman aşağıdaki klasörlerden birinde yer alır:

  • C:\windows\microsoft.net\Framework (32 bit derlemeler)
  • C:\windows\microsoft.net\Framework64 (64 bit derlemeler)

Bu klasörler altında, çeşitli .NET sürümleri için bir klasör olacaktır. Genellikle yalnızca şu konularla ilgileniriz:

  • v2.0.50727 (.NET 2.0, 3.0, 3.5)
  • v4.0.30319 (.NET 4.x)

.NET 1.0 ve 1.1 klasörlerini fark edebilirsiniz. Bunlar destek dışıdır ve herhangi bir derleme içermez. .NET 3.0 ve 3.5 klasörlerini de fark edebilirsiniz. Bunlar .NET'in bu sürümlerine özgü bazı dosyalar içerebilir, ancak bunların tümü sürüm 2.0'ın uzantılarıdır ve System.Data.DLL bir uzantı DLL'i olmadığından 2.0 klasöründe bulunur. Daha önce bahsedilen klasörler, yerleşik Framework DLL'lerinin konumlarıdır.

Buna ek olarak, bu DLL'ler ve üçüncü taraf DLL'ler, arama algoritmasının göründüğü GAC'de görünür. GAC şu durumdadır:

  • C:\windows\assembly (.NET Framework 2.0, 3.0, 3.1, 4.x için).

Bazı .NET 4.0 derlemeleri de şunlar altında bulunur:

  • C:\windows\microsoft.net\assembly.

Daha eksiksiz yönergeler için bkz . Çalışma Zamanı Derlemeleri Nasıl Bulur? PROCMON kullanımı arama yolunu da gösterebilir.

Üçüncü taraf sağlayıcılar

Analysis Services gibi Microsoft tarafından yüklenen birçok sağlayıcı .NET Framework ile birlikte gelmez. Buna ek olarak, Oracle'ın ODP Sağlayıcısı gibi bağımsız olarak yüklenen üçüncü taraf .NET sağlayıcıları da vardır.

Üçüncü taraf sağlayıcılar için derlemenin aşağıdaki klasörlerden birinde bulunduğundan ve uygulamaya bağlı olarak 64 bit veya 32 bit olduğundan emin olun:

  • C:\windows\microsoft.net\assembly (.NET Framework 4.x sürümleri için)
  • C:\windows\assembly (.NET Framework 2.0, 3.0, 3.1, 4.x için)

Aşağıdaki tabloda, bazı yaygın sağlayıcıların DLL ve derleme adları gösterilmektedir:

Kolay ad Derleme adı DLL
SQL Server için .NET Veri Sağlayıcısı System.Data.SqlClient System.Data.DLL
OLE DB Sağlayıcısı System.Data.OleDb System.Data.DLL
ODBC Sağlayıcısı System.Data.Odbc System.Data.DLL
Analysis Services Sağlayıcısı Analysis Services Sağlayıcısı Microsoft.AnalysisServices.AdomdClientMicrosoft.AnalysisServices.AdomdClient.DLL
SQL CE Sağlayıcısı System.Data.SqlServerCe System.Data.SqlServerCe.DLL
Microsoft'un Oracle Sağlayıcısı System.Data.OracleClient System.Data.OracleClient.DLL
Oracle'ın ODP Sağlayıcısı Oracle.DataAccess.Client Oracle.DataAccess.DLL

.NET sağlayıcılarıyla ilgili sorunları giderirken, uygulamayı bağımsız olarak test etmek için ODBC Yöneticisi veya UDL dosyası gibi yerleşik veya genelleştirilmiş bir araç yoktur. Böyle durumlarda, istediğiniz dilde hızlı bir test uygulaması yazabilirsiniz. PowerShell'de yazılmış örnek bir uygulama aşağıda verilmiştir:

#-------------------------------
#
# get-SqlAuthScheme.ps1
#
# PowerShell script to test a System.Data.SqlClient database connection
#
# USAGE: .\get-SqlAuthScheme tcp:SQLProd01.contoso.com,1433   ' explicitly specify DNS suffix, protocol, and port # ('tcp' must be lower case)
# USAGE: .\get-SqlAuthScheme SQLProd01                        ' let the driver figure out the DNS suffix, protocol, and port #
#
#-------------------------------
param ([string]$server = "localhost")
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
$connstr = "Server=$server;Database=master;Integrated Security=SSPI"

[System.Data.SqlClient.SqlConnection] $conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = $connstr

[System.DateTime] $start = Get-Date

$conn.Open()

[System.Data.SqlClient.SqlCommand] $cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.CommandText = "select auth_scheme from sys.dm_exec_connections where session_id=@@spid"
$cmd.Connection = $conn
$dr = $cmd.ExecuteReader()
$result = $dr.Read()
$auth_scheme = $dr.GetString(0)

$conn.Close()
$conn.Dispose()

[System.DateTime] $end = Get-Date
[System.Timespan] $span = ($end - $start)

"End time: " + $end.ToString("M/d/yyyy HH:mm:ss.fff")
"Elapsed time was " + $span.Milliseconds + " ms."
"Auth scheme for " + $server + ": " + $auth_scheme

Betiğiniz içinde C:\temp bulunuyorsa ve adlı sqlprod01bir sunucunun kimlik doğrulama düzenini almak istiyorsanız, Windows PowerShell'den yönetici olarak aşağıdaki komutu çalıştırın:

.\get-sqlauthscheme.ps1 sqlprod01

Genel olarak, derleme/DLL varsa .NET sağlayıcılarının yüklenmesi sorun oluşturmaz. En yaygın sorun, UDL dosyası aracılığıyla eşdeğer bir OLE DB sağlayıcısı kullanarak test edebilirsiniz kimlik doğrulama sorunlarıdır.

Bilinmeyen sürücülere yönelik bağlantı dizesi ile ilgili yardım için bkz. Bağlantı Dizeleri Başvurusu.

Daha Fazla Bilgi