DbProviderFactory の取得Obtaining a DbProviderFactory

DbProviderFactory を取得する過程では、データ プロバイダーに関する情報が DbProviderFactories クラスに渡されます。The process of obtaining a DbProviderFactory involves passing information about a data provider to the DbProviderFactories class. GetFactory メソッドはこの情報に基づいて、厳密に型指定されたプロバイダー ファクトリを作成します。Based on this information, the GetFactory method creates a strongly typed provider factory. たとえば、SqlClientFactory を作成するには、GetFactory の引数にプロバイダー名 System.Data.SqlClient を文字列として指定します。For example, to create a SqlClientFactory, you can pass GetFactory a string with the provider name specified as "System.Data.SqlClient". GetFactory には、DataRow を引数として受け取るオーバーロードも存在します。The other overload of GetFactory takes a DataRow. プロバイダー ファクトリを作成すると、対応するメソッドを使って他のオブジェクトを作成できるようになります。Once you create the provider factory, you can then use its methods to create additional objects. SqlClientFactory のメソッドには、CreateConnectionCreateCommandCreateDataAdapter などがあります。Some of the methods of a SqlClientFactory include CreateConnection, CreateCommand, and CreateDataAdapter.

注意

同様の機能は、.NET Framework の OracleClientFactory クラス、OdbcFactory クラス、および OleDbFactory クラスにも用意されています。The .NET Framework OracleClientFactory, OdbcFactory, and OleDbFactory classes also provide similar functionality.

DbProviderFactory の登録Registering DbProviderFactories

ファクトリ ベースのクラスをサポートする各 .NET Framework データ プロバイダーの登録の構成情報、 DbProviderFactoriesのセクション、 machine.configローカル コンピューター上のファイル。Each .NET Framework data provider that supports a factory-based class registers configuration information in the DbProviderFactories section of the machine.config file on the local computer. 次の構成ファイル フラグメントは、System.Data.SqlClient の構文と形式を示しています。The following configuration file fragment shows the syntax and format for 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>  

インバリアント属性は、基になるデータ プロバイダーを識別します。The invariant attribute identifies the underlying data provider. この 3 つの部分から成る命名構文は、新しいファクトリを作成するときのほか、プロバイダー名とそれに関連付けられた接続文字列を実行時に取得できるようにするために、アプリケーションの構成ファイルでプロバイダーを指定するときにも使用されます。This three-part naming syntax is also used when creating a new factory and for identifying the provider in an application configuration file so that the provider name, along with its associated connection string, can be retrieved at run time.

プロバイダー情報の取得Retrieving Provider Information

GetFactoryClasses メソッドを使用すると、ローカル コンピューターにインストールされているすべてのデータ プロバイダーに関する情報を取得できます。You can retrieve information about all of the data providers installed on the local computer by using the GetFactoryClasses method. 返します、DataTableという名前のDbProviderFactories次の表で説明されている列を格納しています。It returns a DataTable named DbProviderFactories that contains the columns described in the following table.

列の序数Column ordinal 列名Column name サンプルの出力Example output 説明Description
00 名前Name SqlClient Data ProviderSqlClient Data Provider データ プロバイダーの読み取り可能な名前Readable name for the data provider
11 説明Description .Net Framework Data Provider for SqlServer.Net Framework Data Provider for SqlServer データ プロバイダーの読み取り可能な説明Readable description of the data provider
22 InvariantNameInvariantName System.Data.SqlClientSystem.Data.SqlClient プログラムでデータ プロバイダーの参照に使用できる名前Name that can be used programmatically to refer to the data provider
33 AssemblyQualifiedNameAssemblyQualifiedName System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 オブジェクトをインスタンス化するための十分な情報を保持している、ファクトリ クラスの完全修飾名Fully qualified name of the factory class, which contains enough information to instantiate the object

この DataTable を使用して、ユーザーに実行時に DataRow を選択してもらうことができます。This DataTable can be used to enable a user to select a DataRow at run time. 次に、選択された DataRowGetFactory メソッドに渡すことで、厳密に型指定された DbProviderFactory を作成できます。The selected DataRow can then be passed to the GetFactory method to create a strongly typed DbProviderFactory. 選択された DataRowGetFactory メソッドに渡すことによって、目的の DbProviderFactory オブジェクトを作成できます。A selected DataRow can be passed to the GetFactory method to create the desired DbProviderFactory object.

インストールされているプロバイダー ファクトリ クラスの一覧表示Listing the Installed Provider Factory Classes

次の例では、インストールされているプロバイダーの情報を含んだ GetFactoryClasses を、DataTable メソッドを使用して取得します。This example demonstrates how to use the GetFactoryClasses method to return a DataTable containing information about the installed providers. このコードは、DataTable 内の各行を反復処理しながら、インストールされている各プロバイダーの情報をコンソール ウィンドウに表示します。The code iterates through each row in the DataTable, displaying information for each installed provider in the console window.

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

アプリケーション構成ファイルを使用したファクトリ情報の保存Using Application Configuration Files to Store Factory Information

ファクトリを使用したデザイン パターンなど、アプリケーション構成ファイルでプロバイダーと接続文字列情報を格納する必要がありますapp.config Windows アプリケーションの場合とweb.config ASP.NET アプリケーション用。The design pattern used for working with factories entails storing provider and connection string information in an application configuration file, such as app.config for a Windows application, and web.config for an ASP.NET application.

次の構成ファイル フラグメントは、2 つの名前付き接続文字列 (SQL Server の Northwind データベースに接続するための "NorthwindSQL" と、Access/Jet の Northwind データベースに接続するための "NorthwindAccess") を保存する例を示したものです。The following configuration file fragment demonstrates how to save two named connection strings, "NorthwindSQL" for a connection to the Northwind database in SQL Server, and "NorthwindAccess" for a connection to the Northwind database in Access/Jet. インバリアントの名前が使用される、 providerName属性。The invariant name is used for the providerName attribute.

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

プロバイダー名による接続文字列の取得Retrieving a Connection String by Provider Name

プロバイダー ファクトリを作成するには、プロバイダー名だけでなく接続文字列も指定する必要があります。In order to create a provider factory, you must supply a connection string as well as the provider name. この例では、インバリアント形式でプロバイダー名を渡すことによって、アプリケーション構成ファイルから接続文字列を取得"System.Data.ProviderName"。This example demonstrates how to retrieve a connection string from an application configuration file by passing the provider name in the invariant format "System.Data.ProviderName". このコードでは、ConnectionStringSettingsCollection を反復処理しています。The code iterates through the ConnectionStringSettingsCollection. 成功した場合には ProviderName が、それ以外の場合は null (Visual Basic の場合は Nothing) が返されます。It returns the ProviderName on success; otherwise null (Nothing in Visual Basic). プロバイダーに複数のエントリが存在した場合は、最初に見つかったエントリが返されます。If there are multiple entries for a provider, the first one found is returned. 詳細と構成ファイルから接続文字列を取得する例については、次を参照してください。接続文字列と構成ファイルします。For more information and examples of retrieving connection strings from configuration files, see Connection Strings and Configuration Files.

注意

このコードを実行するには、System.Configuration.dll を参照設定する必要があります。A reference to System.Configuration.dll is required in order for the code to run.

// Retrieve a connection string by specifying the providerName.
// Assumes one connection string per provider in the config file.
static string GetConnectionStringByProvider(string providerName)
{
    // Return null on failure.
    string returnValue = null;

    // 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)
                returnValue = cs.ConnectionString;
            break;
        }
    }
    return returnValue;
}
' 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 および DbConnection の作成Creating the DbProviderFactory and DbConnection

この例は、作成する方法を示します、DbProviderFactoryDbConnection形式でプロバイダー名を渡して"System.Data.ProviderName"と接続文字列。This example demonstrates how to create a DbProviderFactory and DbConnection object by passing it the provider name in the format "System.Data.ProviderName" and a connection string. 成功した場合には DbConnection オブジェクトが返されます。エラーが発生した場合は null (Visual Basic の場合は Nothing) が返されます。A DbConnection object is returned on success; null (Nothing in Visual Basic) on any error.

このコードでは、DbProviderFactory を呼び出すことによって GetFactory を取得しています。The code obtains the DbProviderFactory by calling GetFactory. 次に、CreateConnection メソッドで DbConnection オブジェクトを作成し、ConnectionString プロパティに接続文字列を設定します。Then the CreateConnection method creates the DbConnection object and the ConnectionString property is set to the connection string.

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

関連項目See also