Share via


DbProviderFactory Alma

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

.NET Framework 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 yerel bilgisayardaki machine.config dosyasının DbProviderFactories 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>  

Sabit öznitelik, temel alınan veri sağlayıcısını tanımlar. Bu üç bölümlü adlandırma söz dizimi, yeni bir fabrika oluşturulurken ve sağlayıcının uygulama yapılandırma dosyasında tanımlanması için de kullanılır; böylece sağlayıcı adı, ilişkili bağlantı dizesi ile 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. Aşağıdaki tabloda açıklanan sütunları içeren adlandırılmış bir DataTable DbProviderFactories döndürür.

Sütun sıralı Sütun adı Örnek çıkış Açıklama
0 Ad SqlClient Veri Sağlayıcısı Veri sağlayıcısı için okunabilir ad
1 Açıklama 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 , kullanıcının çalışma zamanında seçmesini DataRow sağlamak için kullanılabilir. Seçili DataRow daha sonra kesin olarak yazılan DbProviderFactorybir oluşturmak için yöntemine GetFactory geçirilebilir. SeçilenDataRow, istenen DbProviderFactory nesneyi oluşturmak için yöntemine geçirilebilirGetFactory.

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 DataTable için yönteminin nasıl kullanılacağını GetFactoryClasses 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" adlı iki bağlantı dizesi ve Access/Jet'teki Northwind veritabanına bağlantı için "NorthwindAccess" öğesinin nasıl kaydedileceklerini gösterir. ProviderName özniteliği için sabit ad 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>  

Sağlayıcı Adına Göre Bağlan Ion 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ğlan Ion 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 Db Bağlan ion oluşturma

Bu örnek, sağlayıcı DbConnection adını "System.Data.ProviderName" biçiminde ve bir bağlantı dizesi geçirerek ve nesnesinin nasıl oluşturulacağını DbProviderFactory 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ı GetFactoryyaparak öğesini DbProviderFactory 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

Ayrıca bkz.