Aracılığıyla paylaş


DbProviderFactory'yi Alma

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

Ayrıca bkz.