Delen via


Een DbProviderFactory verkrijgen

Het proces van het verkrijgen van een DbProviderFactory gegevens omvat het doorgeven van informatie over een gegevensprovider aan de DbProviderFactories klasse. Op basis van deze informatie maakt de GetFactory methode een sterk getypeerde providerfactory. Als u bijvoorbeeld een SqlClientFactorytekenreeks wilt maken, kunt u een tekenreeks doorgeven GetFactory met de providernaam die is opgegeven als System.Data.SqlClient. De andere overbelasting van GetFactory neemt een DataRow. Zodra u de providerfactory hebt gemaakt, kunt u de methoden ervan gebruiken om extra objecten te maken. Enkele van de methoden van een SqlClientFactory include CreateConnection, CreateCommanden CreateDataAdapter.

Notitie

De OracleClientFactory, OdbcFactoryen OleDbFactory klassen bieden ook vergelijkbare functionaliteit.

DbProviderFactories registreren

Elke .NET Framework-gegevensprovider die ondersteuning biedt voor een factory-klasse registreert configuratiegegevens in de sectie DbProviderFactories van het bestand machine.config op de lokale computer. In het volgende fragment van het configuratiebestand ziet u de syntaxis en indeling voor 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>

Het kenmerk invariant identificeert de onderliggende gegevensprovider. Deze driedelige naamgevingsyntaxis wordt ook gebruikt bij het maken van een nieuwe factory en voor het identificeren van de provider in een toepassingsconfiguratiebestand, zodat de providernaam, samen met de bijbehorende verbindingsreeks, tijdens runtime kan worden opgehaald.

Providergegevens ophalen

U kunt informatie ophalen over alle gegevensproviders die op de lokale computer zijn geïnstalleerd met behulp van de GetFactoryClasses methode. Het retourneert een DataTable benoemde DbProviderFactories die de kolommen bevat die in de volgende tabel worden beschreven.

Kolomordinaal Kolomnaam Voorbeelduitvoer Beschrijving
0 Naam SqlClient-gegevensprovider Leesbare naam voor de gegevensprovider
1 Beschrijving .Net Framework-gegevensprovider voor SqlServer Leesbare beschrijving van de gegevensprovider
2 InvariantName System.Data.SqlClient Naam die programmatisch kan worden gebruikt om te verwijzen naar de gegevensprovider
3 AssemblyQualifiedName System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Volledig gekwalificeerde naam van de fabrieksklasse, die voldoende informatie bevat om het object te instantiëren

Dit DataTable kan worden gebruikt om een gebruiker in staat te stellen een DataRow runtime te selecteren. De geselecteerde DataRow kan vervolgens worden doorgegeven aan de GetFactory methode om een sterk getypte DbProviderFactorymethode te maken. Een geselecteerde DataRow kan worden doorgegeven aan de GetFactory methode om het gewenste DbProviderFactory object te maken.

De geïnstalleerde Provider Factory-klassen weergeven

In dit voorbeeld ziet u hoe u de GetFactoryClasses methode gebruikt om een DataTable met informatie over de geïnstalleerde providers te retourneren. De code doorloopt elke rij in de DataTable, met informatie voor elke geïnstalleerde provider in het consolevenster.

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

Toepassingsconfiguratiebestanden gebruiken om fabrieksgegevens op te slaan

Het ontwerppatroon dat wordt gebruikt voor het werken met factory's, omvat het opslaan van provider- en verbindingsreeks informatie in een toepassingsconfiguratiebestand, zoals app.config voor een Windows-toepassing en web.config voor een ASP.NET-toepassing.

Het volgende fragment van het configuratiebestand laat zien hoe u twee benoemde verbindingsreeks s opslaat: 'NorthwindSQL' voor een verbinding met de Northwind-database in SQL Server en 'NorthwindAccess' voor een verbinding met de Northwind-database in Access/Jet. De invariantnaam wordt gebruikt voor het kenmerk 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>

Belangrijk

Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. Als u verbinding maakt met Azure SQL, is Managed Identities voor Azure-resources de aanbevolen verificatiemethode.

Een verbindingsreeks ophalen op providernaam

Als u een providerfactory wilt maken, moet u een verbindingsreeks en de providernaam opgeven. In dit voorbeeld ziet u hoe u een verbindingsreeks ophaalt uit een toepassingsconfiguratiebestand door de providernaam door te geven in de invariant-indeling System.Data.ProviderName. De code doorloopt de ConnectionStringSettingsCollection. De functie retourneert de ProviderName on-geslaagde bewerking; anders null (Nothing in Visual Basic). Als er meerdere vermeldingen voor een provider zijn, wordt het eerste gevonden item geretourneerd. Zie Verbindingsreeksen en configuratiebestanden voor meer informatie en voorbeelden van het ophalen van verbindingsreeks s uit configuratiebestanden.

Notitie

Er is een verwijzing naar System.Configuration.dll vereist om de code uit te voeren.

// 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 en DbConnection maken

In dit voorbeeld ziet u hoe u een DbProviderFactory en DbConnection object maakt door deze de naam van de provider door te geven in de indeling System.Data.ProviderName en een verbindingsreeks. Een DbConnection object wordt geretourneerd bij succes; null (Nothing in Visual Basic) bij een fout.

De code verkrijgt de DbProviderFactory door aanroepen GetFactory. Vervolgens maakt de CreateConnection methode het DbConnection object en wordt de ConnectionString eigenschap ingesteld op de verbindingsreeks.

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

Zie ook