Sdílet prostřednictvím


Získání DbProviderFactory

Proces získání DbProviderFactory zahrnuje předání informací o poskytovateli dat do DbProviderFactories třídy. Na základě těchto informací GetFactory metoda vytvoří objekt pro vytváření zprostředkovatele silného typu. Pokud například chcete vytvořit SqlClientFactory, můžete předat GetFactory řetězec s názvem zprostředkovatele zadaným jako "System.Data.SqlClient". Druhé přetížení GetFactory přebírá DataRow. Jakmile vytvoříte objekt pro vytváření zprostředkovatele, můžete pomocí jeho metod vytvořit další objekty. Některé metody SqlClientFactory zahrnutí CreateConnection, CreateCommanda CreateDataAdapter.

Poznámka:

Třídy OracleClientFactory, OdbcFactorya OleDbFactory třídy také poskytují podobné funkce.

Registrace DbProviderFactories

Každý zprostředkovatel dat rozhraní .NET Framework, který podporuje třídu založenou na továrně, registruje konfigurační informace v části DbProviderFactories souboru machine.config v místním počítači. Následující fragment konfiguračního souboru ukazuje syntaxi a formát pro System.Data.SqlClient.

<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>

Invariantní atribut identifikuje podkladového zprostředkovatele dat. Tato třídílná syntaxe pojmenování se používá také při vytváření nové továrny a k identifikaci zprostředkovatele v konfiguračním souboru aplikace, aby se název zprostředkovatele společně s přidruženými připojovací řetězec mohl načíst za běhu.

Načítání informací o zprostředkovateli

Pomocí této metody můžete načíst informace o všech poskytovatelích dat nainstalovaných v místním počítači GetFactoryClasses . Vrátí pojmenovanou DataTable DbProviderFactories , která obsahuje sloupce popsané v následující tabulce.

Řadový sloupcový Název sloupce Příklad výstupu Popis
0 Název Zprostředkovatel dat SqlClient Čitelný název zprostředkovatele dat
0 Popis Rozhraní .Net Framework Zprostředkovatel dat pro SQLServer Čitelný popis zprostředkovatele dat
2 InvariantName System.Data.SqlClient Název, který lze použít programově k odkazování na zprostředkovatele dat
3 AssemblyQualifiedName System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Plně kvalifikovaný název třídy továrny, která obsahuje dostatek informací pro vytvoření instance objektu

To DataTable se dá použít k povolení výběru uživatele DataRow za běhu. DataRow Vybranou možnost pak lze předat GetFactory metodě vytvořit silné typ .DbProviderFactory Vybranou DataRow metodu GetFactory lze předat k vytvoření požadovaného DbProviderFactory objektu.

Výpis nainstalovaných tříd služby Provider Factory

Tento příklad ukazuje, jak použít metodu GetFactoryClasses k vrácení DataTable obsahující informace o nainstalovaných poskytovateli. Kód prochází každý řádek v okně DataTablekonzoly a zobrazuje informace pro každého nainstalovaného zprostředkovatele.

// 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

Použití konfiguračních souborů aplikace k ukládání informací o továrně

Vzor návrhu používaný pro práci s továrnami zahrnuje ukládání informací o poskytovateli a připojovací řetězec v konfiguračním souboru aplikace, jako je app.config pro aplikaci pro Windows a web.config pro aplikaci ASP.NET.

Následující fragment konfiguračního souboru ukazuje, jak uložit dva pojmenované připojovací řetězec: "NorthwindSQL" pro připojení k databázi Northwind v SQL Serveru a "NorthwindAccess" pro připojení k databázi Northwind v Accessu/Jet. Invariantní název se používá pro atribut providerName.

<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>

Důležité

Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, spravované identity pro prostředky Azure se doporučují metodou ověřování.

Načtení připojovacího řetězce podle názvu zprostředkovatele

Chcete-li vytvořit továrnu poskytovatele, musíte zadat připojovací řetězec a také název poskytovatele. Tento příklad ukazuje, jak načíst připojovací řetězec z konfiguračního souboru aplikace předáním názvu zprostředkovatele v invariantním formátu "System.Data.ProviderName". Kód prochází .ConnectionStringSettingsCollection Vrátí úspěch ProviderName ; jinak null (Nothing v jazyce Visual Basic). Pokud je pro zprostředkovatele více položek, vrátí se první nalezený záznam. Další informace a příklady načítání připojovací řetězec z konfiguračních souborů najdete v tématu Připojovací řetězce a konfigurační soubory.

Poznámka:

Aby se kód spustil, vyžaduje se odkaz na tento odkaz System.Configuration.dll .

// 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

Vytvoření DbProviderFactory a DbConnection

Tento příklad ukazuje, jak vytvořit DbProviderFactory a DbConnection objekt předáním názvu zprostředkovatele ve formátu System.Data.ProviderName a připojovací řetězec. Objekt DbConnection je vrácen při úspěchu; null (Nothing v jazyce Visual Basic) u jakékoli chyby.

Kód získá DbProviderFactory voláním GetFactory. CreateConnection Pak metoda vytvoří DbConnection objekt a ConnectionString vlastnost je nastavena na připojovací řetězec.

// 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

Viz také