sql >> データベース >  >> RDS >> Oracle

アプリケーションデータベースにとらわれない状態を維持する(ADO.NETとDBロジックのカプセル化)

    注: この回答は、ORM(Entity FrameworkやNHibernateなど)やLINQtoSQLの代わりに基本的なADO.NET2機能を使用する場合に関連します。

    app.configで定義された接続文字列があると仮定しましょう :

    <connectionStrings>
        <add name="SomeConnection"
             providerName="System.Data.SqlClient"
             connectionString="..." />
    </connectionStrings>
    

    providerNameの存在に注意してください 属性とその値。別のDBプロバイダーの値を入力することもできます。 System.Data.SQLite

    (非標準のプロバイダー、つまりデフォルトで.NET Frameworkにないプロバイダーは、最初にapp.configに登録する必要があることに注意してください。 またはクライアントマシンのmachine.config 。)

    これで、次のように、プロバイダーに完全に依存しない方法で、指定されたデータベースを操作できます。

    using System.Configuration;  // for ConfigurationManager
    using System.Data;           // for all interface types
    using System.Data.Common;    // for DbProviderFactories
    
    var cs = ConfigurationManager.ConnectionStrings["SomeConnection"];
    //                                              ^^^^^^^^^^^^^^^^
    
    var factory = DbProviderFactories.GetFactory(cs.ProviderName);
    //                                           ^^^^^^^^^^^^^^^
    
    using (IDbConnection connection = factory.CreateConnection())
    {
        connection.ConnectionString = cs.ConnectionString;
        //                            ^^^^^^^^^^^^^^^^^^^
        connection.Open();
        try
        {
            using (IDbCommand command = connection.CreateCommand())
            {
                ...  // do something with the database
            }
        }
        finally
        {
            connection.Close();
        }
    }
    

    このコードがインターフェイスタイプでのみ機能することに注意してください。特定のDBプロバイダーを指定する唯一の場所は、providerNameを使用することです。 app.configの属性値 ファイル。 (app.configからの設定があるすべての場所にマークを付けました ^^^で取得されます s。)

    さらに読む:

    • ADO.NET 2.0の基本クラスとファクトリを使用した一般的なコーディング:
      私の回答に似ていますが、より詳細に説明します。

    • ADO.NETマネージドプロバイダーとDataSet開発者センター:
      には、特に、利用可能なADO.NETデータベースプロバイダーのインデックスが含まれています。



    1. MySQLで特定の文字のASCIIコードを見つける方法

    2. 結果セットに基づいてビューの基になる列を取得します

    3. MySQL、NULLまたは空の文字列を挿入する方が良いですか?

    4. MySqlのデフォルト値に関数を使用できますか?