1

ユーザーが SQL Server CE または SQL Server Express データベースをバックグラウンドとして選択できるようにするアプリを作成しています。ただし、これらは別々の参照と別々のメソッドを使用します。

これを行う適切な .NET メソッドはありますか、またはユーザー設定を保存し、次のようなデータベースの種類をチェックするプログラム全体で if then ステートメントを使用しますか?

if (Properties.Settings.Default.dbType == 1)
{ SqlConnection blah = new SqlConnection}
else if (Properties.Settings.Default.dbType == 2)
{ SqlCEConnection blah = new SqlCEConnection}

これは機能しますが、もっと良い方法があるはずです。

4

1 に答える 1

2

SqlConnection と SqlCEConnection はどちらも System.Data.Common.DbConnection を拡張するため、"blah" を DbConnection として宣言すると、同じメソッドとプロパティを使用できるようになります。

正しい接続タイプを実際に作成するには、System.Data.Common.DbProviderFactories クラスと System.Data.Common.DbProviderFactory クラスを使用します。例えば:

DbProviderFactory providerFactory = DbProviderFactories.GetFactory("The Provider Name");

using (DbConnection connection = providerFactory.CreateConnection())
{
    connection.ConnectionString = "The Connection String";

    connection.Open();

    // Use the "connection" object here
}

「プロバイダー名」には、データベースの種類に応じて「System.Data.SqlClient」または「System.Data.SqlServerCe」を入力します。次に、「接続文字列」については、プロバイダーの種類に応じた正しい接続文字列を入力します。

編集:この手法は、App.config ファイルと System.Configuration.ConfigurationManager クラスでうまく機能します。たとえば、App.config ファイルが次のようになっているとします。

<?xml version="1.0" encoding="utf-8"?>

<configuration>
    <connectionStrings>
        <add name="TheConnectionString" providerName="System.Data.SqlClient" connectionString="Blah Blah Blah" />
    </connectionStrings>
</configuration>

次に、次のようにこれらの構成設定にアクセスできます。

DbProviderFactory providerFactory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["TheConnectionString"].ProviderName);

using (DbConnection connection = providerFactory.CreateConnection())
{
    connection.ConnectionString = ConfigurationManager.ConnectionStrings["TheConnectionString"].ConnectionString;

    connection.Open();

    // Use the "connection" object here
}
于 2013-01-03T05:07:27.303 に答える