Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir DbProviderFactory elde etme süreci, bir veri sağlayıcısı hakkındaki bilgilerin DbProviderFactories sınıfına aktarımını içerir. Bu bilgilere dayanarak GetFactory yöntemi, güçlü tür belirlenmiş bir sağlayıcı fabrikası oluşturur. Örneğin, SqlClientFactory oluşturmak için, sağlayıcı adı "System.Data.SqlClient" olarak belirtilen bir dizeyi GetFactory'ye geçirebilirsiniz. Diğer aşırı yükleme GetFactory bir DataRow alır. Sağlayıcı fabrikasını oluşturduktan sonra, ek nesneler oluşturmak için yöntemlerini kullanabilirsiniz. Bir SqlClientFactory yönteminin bazı yöntemleri şunlardır: CreateConnection, CreateCommand ve CreateDataAdapter.
Not
OracleClientFactory, OdbcFactoryve OleDbFactory sınıfları da benzer işlevler sağlar.
DbProviderFactories'i Kaydetme
Fabrika tabanlı bir sınıfı destekleyen her .NET Framework veri sağlayıcısı, yapılandırma bilgilerini DbProviderFactories yerel bilgisayardaki machine.config dosyasının bölümüne kaydeder. Aşağıdaki yapılandırma dosyası parçası için System.Data.SqlClientsöz dizimini ve biçimini gösterir.
<system.data>
<DbProviderFactories>
<add name="SqlClient Data Provider"
invariant="System.Data.SqlClient"
description=".Net Framework Data Provider for SqlServer"
type="System.Data.SqlClient.SqlClientFactory, System.Data,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
</DbProviderFactories>
</system.data>
özniteliği, invariant temel alınan veri sağlayıcısını tanımlar. Bu üç bölümden oluşan adlandırma söz dizimi, yeni bir fabrika oluşturulurken ve sağlayıcının bir uygulama yapılandırma dosyasında tanımlanması için de kullanılır; böylece sağlayıcı adı, ilişkili bağlantı dizesiyle birlikte çalışma zamanında alınabilir.
Sağlayıcı Bilgilerini Alma
yöntemini kullanarak GetFactoryClasses yerel bilgisayarda yüklü olan tüm veri sağlayıcıları hakkında bilgi alabilirsiniz.
DataTable adındaki ve aşağıdaki tabloda açıklanan sütunları içeren bir DbProviderFactories döndürür.
| Sütun sıralı | Sütun adı | Örnek çıkış | Açıklama |
|---|---|---|---|
| 0 | Name |
SqlClient Veri Sağlayıcısı | Veri sağlayıcısı için okunabilir ad |
| 1 | Description |
SqlServer için .Net Framework Veri Sağlayıcısı | Veri sağlayıcısının okunabilir açıklaması |
| 2 | InvariantName |
System.Data.SqlClient | Veri sağlayıcısına başvurmak için program aracılığıyla kullanılabilecek ad |
| 3 | AssemblyQualifiedName |
System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | Nesnenin örneğini oluşturacak kadar bilgi içeren fabrika sınıfının tam adı |
Bu DataTable, çalıştırma sırasında bir DataRow seçmesi için kullanıcıya olanak tanır. Seçili DataRow, kesin yazımlı bir GetFactory oluşturmak üzere DbProviderFactory yöntemine geçirilebilir. Seçilen DataRow, istenen GetFactory nesnesini oluşturmak için DbProviderFactory yöntemine geçirilebilir.
Yüklü Sağlayıcı Fabrikası Sınıflarını Listeleme
Bu örnek, GetFactoryClasses yöntemini kullanarak yüklenmiş sağlayıcılar hakkında bilgi içeren bir DataTable döndürmeyi gösterir. Kod, her satırdaki DataTable öğesini yineleyerek konsol penceresinde yüklü olan her sağlayıcının bilgilerini görüntüler.
// This example assumes a reference to System.Data.Common.
static DataTable GetProviderFactoryClasses()
{
// Retrieve the installed providers and factories.
DataTable table = DbProviderFactories.GetFactoryClasses();
// Display each row and column value.
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(row[column]);
}
}
return table;
}
' This example assumes a reference to System.Data.Common.
Private Shared Function GetProviderFactoryClasses() As DataTable
' Retrieve the installed providers and factories.
Dim table As DataTable = DbProviderFactories.GetFactoryClasses()
' Display each row and column value.
Dim row As DataRow
Dim column As DataColumn
For Each row In table.Rows
For Each column In table.Columns
Console.WriteLine(row(column))
Next
Next
Return table
End Function
Fabrika Bilgilerini Depolamak için Uygulama Yapılandırma Dosyalarını Kullanma
Fabrikalarla çalışmak için kullanılan tasarım deseni, sağlayıcıyı ve bağlantı dizesi bilgilerini windows uygulaması için app.config ve ASP.NET uygulaması için web.config gibi bir uygulama yapılandırma dosyasında depolamayı gerektirir.
Aşağıdaki yapılandırma dosyası parçası, sql server'da Northwind veritabanına bağlantı için "NorthwindSQL" ve Access/Jet'teki Northwind veritabanına bağlantı için "NorthwindAccess" adlı iki bağlantı dizesi kaydetme işlemini gösterir.
invariant adı, providerName özniteliği için kullanılır.
<configuration>
<connectionStrings>
<clear/>
<add name="NorthwindSQL"
providerName="System.Data.SqlClient"
connectionString=
"Data Source=MSSQL1;Initial Catalog=Northwind;Integrated Security=true"
/>
<add name="NorthwindAccess"
providerName="System.Data.OleDb"
connectionString=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Northwind.mdb;"
/>
</connectionStrings>
</configuration>
Önemli
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Azure SQL'e bağlanıyorsanız önerilen kimlik doğrulama yöntemi Azure kaynakları için Yönetilen Kimlikler'dir.
Sağlayıcı Adına Göre Bağlantı Dizesi Alma
Sağlayıcı fabrikası oluşturmak için sağlayıcı adının yanı sıra bir bağlantı dizesi sağlamanız gerekir. Bu örnek, sağlayıcı adını sabit "System.Data.ProviderName" biçiminde geçirerek bir uygulama yapılandırma dosyasından bağlantı dizesi almayı gösterir. Kod, ConnectionStringSettingsCollection üzerinde yinelenir. başarıyla ProviderName döndürür; aksi takdirde null (Nothing Visual Basic'te). Bir sağlayıcı için birden çok giriş varsa, bulunan ilk giriş döndürülür. Yapılandırma dosyalarından bağlantı dizesi alma hakkında daha fazla bilgi ve örnek için bkz. Bağlantı Dizeleri ve Yapılandırma Dosyaları.
Not
Kodun çalışması için System.Configuration.dll başvurusuna ihtiyaç vardır.
// Retrieve a connection string by specifying the providerName.
// Assumes one connection string per provider in the config file.
static string? GetConnectionStringByProvider(string providerName)
{
// Get the collection of connection strings.
ConnectionStringSettingsCollection? settings =
ConfigurationManager.ConnectionStrings;
// Walk through the collection and return the first
// connection string matching the providerName.
if (settings != null)
{
foreach (ConnectionStringSettings cs in settings)
{
if (cs.ProviderName == providerName)
{
return cs.ConnectionString;
}
}
}
return null;
}
' Retrieve a connection string by specifying the providerName.
' Assumes one connection string per provider in the config file.
Private Shared Function GetConnectionStringByProvider( _
ByVal providerName As String) As String
'Return Nothing on failure.
Dim returnValue As String = Nothing
' Get the collection of connection strings.
Dim settings As ConnectionStringSettingsCollection = _
ConfigurationManager.ConnectionStrings
' Walk through the collection and return the first
' connection string matching the providerName.
If Not settings Is Nothing Then
For Each cs As ConnectionStringSettings In settings
If cs.ProviderName = providerName Then
returnValue = cs.ConnectionString
Exit For
End If
Next
End If
Return returnValue
End Function
DbProviderFactory ve DbConnection Oluşturma
Bu örnek, "DbProviderFactory" formatında ve bir bağlantı dizesi sağlayarak DbConnection ve nesnelerinin nasıl oluşturulacağını gösterir. Başarılı olunduğunda bir DbConnection nesnesi döndürülür; herhangi bir hata durumunda null veya (Visual Basic'te Nothing) döndürülür.
Kod, DbProviderFactory çağrısını yaparak GetFactory'i alır. Ardından CreateConnection yöntemi DbConnection nesnesini oluşturur ve ConnectionString özelliği bağlantı dizesine ayarlanır.
// Given a provider name and connection string,
// create the DbProviderFactory and DbConnection.
// Returns a DbConnection on success; null on failure.
static DbConnection CreateDbConnection(
string providerName, string connectionString)
{
// Assume failure.
DbConnection connection = null;
// Create the DbProviderFactory and DbConnection.
if (connectionString != null)
{
try
{
DbProviderFactory factory =
DbProviderFactories.GetFactory(providerName);
connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
}
catch (Exception ex)
{
// Set the connection to null if it was created.
if (connection != null)
{
connection = null;
}
Console.WriteLine(ex.Message);
}
}
// Return the connection.
return connection;
}
' Given a provider, create a DbProviderFactory and DbConnection.
' Returns a DbConnection on success; Nothing on failure.
Private Shared Function CreateDbConnection( _
ByVal providerName As String, ByVal connectionString As String) _
As DbConnection
' Assume failure.
Dim connection As DbConnection = Nothing
' Create the DbProviderFactory and DbConnection.
If Not connectionString Is Nothing Then
Try
Dim factory As DbProviderFactory = _
DbProviderFactories.GetFactory(providerName)
connection = factory.CreateConnection()
connection.ConnectionString = connectionString
Catch ex As Exception
' Set the connection to Nothing if it was created.
If Not connection Is Nothing Then
connection = Nothing
End If
Console.WriteLine(ex.Message)
End Try
End If
' Return the connection.
Return connection
End Function