sql >> Databáze >  >> RDS >> Oracle

Udržování agnostické databáze aplikace (ADO.NET vs zapouzdřující logika DB)

Poznámka: Tato odpověď je relevantní, pokud se rozhodnete použít základní funkce ADO.NET 2 namísto ORM (jako je Entity Framework nebo NHibernate) nebo LINQ to SQL.

Předpokládejme, že máte připojovací řetězec definovaný v app.config :

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

Všimněte si přítomnosti providerName atribut a jeho hodnotu. Můžete také zadat hodnotu pro jiného poskytovatele DB, např. System.Data.SQLite .

(Všimněte si, že nestandardní poskytovatelé, tj. ti, kteří nejsou ve výchozím nastavení v .NET Framework, je třeba nejprve zaregistrovat, a to buď v app.config nebo v machine.config klientského počítače .)

Nyní můžete pracovat se zadanou databází zcela bez ohledu na poskytovatele následovně:

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();
    }
}

Všimněte si, jak tento kód funguje pouze s typy rozhraní. Jediným místem, kde uvádíte konkrétního poskytovatele DB, je providerName hodnotu atributu v app.config soubor. (Označil jsem všechna místa, kde je nastavení z app.config je převzato pomocí ^^^ s.)

Další čtení:

  • Generic Coding with ADO.NET 2.0 Base Classes and Factories:
    podobné mé odpovědi, ale jde do podrobností.

  • ADO.NET Managed Providers a DataSet Developer Center:
    zahrnuje mimo jiné index dostupných poskytovatelů databází ADO.NET.



  1. to_sql pyodbc count pole nesprávné nebo chyba syntaxe

  2. Syntaxe SQL SELECT – řazeno podle DBMS

  3. Jak připojit vzdálenou databázi MySQL v PHP

  4. Mám použít vložený sloupec varchar(max) nebo jej uložit do samostatné tabulky?