sql >> Database >  >> RDS >> Oracle

Een applicatiedatabase agnostisch houden (ADO.NET versus inkapseling van DB-logica)

Opmerking: Dit antwoord is relevant als u besluit om basisfunctionaliteit van ADO.NET 2 te gebruiken in plaats van een ORM (zoals Entity Framework of NHibernate) of LINQ to SQL.

Laten we aannemen dat je een verbindingsreeks hebt gedefinieerd in je app.config :

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

Let op de aanwezigheid van de providerName attribuut en de waarde ervan. U kunt ook een waarde invoeren voor een andere DB-provider, b.v. System.Data.SQLite .

(Merk op dat niet-standaard providers, d.w.z. diegene die niet standaard in het .NET Framework staan, eerst moeten worden geregistreerd, ofwel in app.config of in machine.config . van de clientcomputer .)

Nu kunt u als volgt op een volledig provider-onafhankelijke manier met de gespecificeerde database werken:

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

Merk op hoe deze code alleen werkt met interfacetypes. De enige plaats waar u een bepaalde DB-provider aangeeft, is via de providerName attribuutwaarde in de app.config het dossier. (Ik heb alle plaatsen gemarkeerd waar een instelling van app.config is genomen met ^^^ s.)

Verder lezen:

  • Generieke codering met de ADO.NET 2.0 basisklassen en fabrieken:
    vergelijkbaar met mijn antwoord, maar gaat in meer detail.

  • ADO.NET Managed Providers en DataSet Developer Center:
    bevat onder andere een index van beschikbare ADO.NET databaseproviders.



  1. Transactiebeheer met Django 1.6

  2. converteer datumstring naar mysql datetime-veld

  3. Hoe MariaDB op CentOS 8 te installeren en te beveiligen

  4. Hoe kunt u de actieve gebruikers via SQL verbinden met een postgreSQL-database?