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.
alma işlemi, DbProviderFactory bir veri sağlayıcısı hakkındaki bilgilerin sınıfa geçirilmesini DbProviderFactories içerir. Bu bilgilere dayanarak yöntemi, GetFactory kesin olarak türü belirtilmiş bir sağlayıcı fabrikası oluşturur. Örneğin, oluşturmak SqlClientFactoryiçin "System.Data.SqlClient" olarak belirtilen sağlayıcı adına sahip bir dize geçirebilirsiniz GetFactory . diğer aşırı yüklemesi GetFactory bir DataRowalır. Sağlayıcı fabrikasını oluşturduktan sonra, ek nesneler oluşturmak için yöntemlerini kullanabilirsiniz. Bir yönteminin bazı yöntemleri SqlClientFactory arasında CreateConnection, CreateCommandve CreateDataAdapterbulunur.
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 daha sonra kesin olarak yazılan GetFactorybir oluşturmak için yöntemine DbProviderFactory geçirilebilir. SeçilenDataRow, istenen GetFactory nesneyi oluşturmak için yöntemine geçirilebilirDbProviderFactory.
Yüklü Sağlayıcı Fabrikası Sınıflarını Listeleme
Bu örnek, yüklü sağlayıcılar hakkında bir içeren bilgiler döndürmek GetFactoryClasses için yönteminin nasıl kullanılacağını DataTable gösterir. Kod, konsol penceresinde yüklü her sağlayıcının bilgilerini görüntüleyen içindeki her satırda DataTableyinelenir.
// 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 aracılığıyla yinelenir ConnectionStringSettingsCollection. başarısını 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 öğesine başvuru System.Configuration.dll gereklidir.
// 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, sağlayıcı DbProviderFactory adını "DbConnection" biçiminde ve bir bağlantı dizesi geçirerek ve nesnesinin nasıl oluşturulacağını gösterir. Başarılı DbConnection olduğunda bir nesne döndürülür; null (Nothing Visual Basic'te) herhangi bir hatayla ilgili.
Kod çağrısı DbProviderFactoryyaparak öğesini GetFactory alır.
CreateConnection Ardından yöntemi nesnesini oluşturur DbConnection ve ConnectionString özelliği bağlantı dizesi olarak 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