Megosztás a következőn keresztül:


DbProviderFactory beszerzése

A beszerzés DbProviderFactory folyamata magában foglalja egy adatszolgáltatóval kapcsolatos információk átadását az DbProviderFactories osztálynak. Ezen információk alapján a GetFactory metódus egy erősen gépelt szolgáltató-előállítót hoz létre. Létrehozhat például egy SqlClientFactoryGetFactory sztringet a "System.Data.SqlClient" néven megadott szolgáltatónévvel. A másik túlterhelése GetFactory vesz egy DataRow. A szolgáltató-előállító létrehozása után a metódusaival további objektumokat hozhat létre. A metódusok némelyike SqlClientFactory a következők: CreateConnection, CreateCommandés CreateDataAdapter.

Feljegyzés

A OracleClientFactory, OdbcFactoryés OleDbFactory az osztályok is hasonló funkciókat biztosítanak.

DbProviderFactories regisztrálása

Minden .NET-keretrendszer gyári osztályt támogató adatszolgáltató a konfigurációs adatokat a machine.config fájl DbProviderFactories szakaszában regisztrálja a helyi számítógépen. Az alábbi konfigurációs fájlrészlet a szintaxist és a formátumot System.Data.SqlClientmutatja be.

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

Az invariáns attribútum azonosítja a mögöttes adatszolgáltatót . Ez a háromrészes elnevezési szintaxis egy új gyár létrehozásakor és a szolgáltató alkalmazáskonfigurációs fájlban való azonosítására is használható, hogy a szolgáltató neve és a hozzá tartozó kapcsolati sztring futásidőben lekérhető legyen.

Szolgáltató adatainak lekérése

A módszer használatával GetFactoryClasses lekérheti a helyi számítógépen telepített összes adatszolgáltató adatait. Egy dbProviderFactories nevű értéket ad DataTable vissza, amely az alábbi táblázatban leírt oszlopokat tartalmazza.

Oszloprend Oszlop neve Példakimenet Leírás
0 Név SqlClient-adatszolgáltató Az adatszolgáltató olvasható neve
0 Leírás .Net-keretrendszer adatszolgáltatója az SqlServerhez Az adatszolgáltató olvasható leírása
2 InvariantName System.Data.SqlClient Az adatszolgáltatóra programozott módon hivatkozható név
3 AssemblyQualifiedName System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 A gyári osztály teljes neve, amely elegendő információt tartalmaz az objektum példányosításához

Ez DataTable lehetővé teszi, hogy a felhasználó futásidőben válasszon ki egyet DataRow . A kijelölt DataRow fájl ezután átadható a GetFactory metódusnak egy erősen begépelt DbProviderFactoryelem létrehozásához. A kijelölt DataRow objektum átadható a metódusnak a GetFactory kívánt DbProviderFactory objektum létrehozásához.

A telepített szolgáltatói gyári osztályok listázása

Ez a példa bemutatja, hogyan használható a GetFactoryClasses metódus a telepített szolgáltatókra vonatkozó információkat tartalmazó adatok visszaadására DataTable . A kód végigfut a DataTablekonzolablak minden egyes során, és megjeleníti az egyes telepített szolgáltatók adatait.

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

Alkalmazáskonfigurációs fájlok használata a gyári adatok tárolásához

A gyárakban való munkavégzéshez használt tervezési minta magában foglalja a szolgáltatói és kapcsolati sztring információk tárolását egy alkalmazáskonfigurációs fájlban, például egy Windows-alkalmazás app.config-jában, valamint egy ASP.NET-alkalmazás web.config-jának tárolását.

A következő konfigurációs fájlrészlet bemutatja, hogyan menthet két elnevezett kapcsolati sztring: "NorthwindSQL" az SQL Server Northwind-adatbázisával való kapcsolathoz, a NorthwindAccess pedig az Access/Jet Northwind-adatbázishoz való csatlakozáshoz. Az invariáns nevet a providerName attribútum használja.

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

Fontos

A Microsoft azt javasolja, hogy a legbiztonságosabb hitelesítési folyamatot használja. Ha azure SQL-hez csatlakozik, az Azure-erőforrások felügyelt identitásai az ajánlott hitelesítési módszer.

Kapcsolati sztring lekérése szolgáltatónév alapján

A szolgáltató-előállító létrehozásához meg kell adnia egy kapcsolati sztring és a szolgáltató nevét. Ez a példa bemutatja, hogyan kérhető le egy kapcsolati sztring egy alkalmazáskonfigurációs fájlból a szolgáltató nevének "System.Data.ProviderName" invariáns formátumban való átadásával. A kód a ConnectionStringSettingsCollection. A sikerességet adja ProviderName vissza, ellenkező esetben null (Nothing a Visual Basicben). Ha egy szolgáltató több bejegyzést is tartalmaz, a rendszer az elsőt adja vissza. További információ és példák a kapcsolati sztring konfigurációs fájlokból való lekéréséről: Kapcsolati sztringek és konfigurációs fájlok.

Feljegyzés

A kód futtatásához hivatkozni System.Configuration.dll kell.

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

A DbProviderFactory és a DbConnection létrehozása

Ez a példa bemutatja, hogyan hozhat létre és hozhat létre DbProviderFactory objektumot úgy, hogy átadja neki a "System.Data.ProviderName" formátumú szolgáltatónevet és egy DbConnection kapcsolati sztring. Egy DbConnection objektum sikeres visszaadása; null (Nothing a Visual Basicben) bármilyen hiba esetén.

A kód hívással szerzi be a DbProviderFactory kódot GetFactory. Ezután a CreateConnection metódus létrehozza az DbConnection objektumot, és a ConnectionString tulajdonság a kapcsolati sztring van beállítva.

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

Lásd még