Oracle
 sql >> база данни >  >> RDS >> Oracle

Поддържане на база данни на приложения агностична (ADO.NET срещу капсулираща логика на DB)

Забележка: Този отговор е уместен, ако решите да използвате основна функционалност на ADO.NET 2 вместо ORM (като Entity Framework или NHibernate) или LINQ към SQL.

Да предположим, че имате низ за връзка, дефиниран във вашия 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 се взема с ^^^ с.)

Допълнително четене:

  • Общо кодиране с базовите класове и фабрики на ADO.NET 2.0:
    подобно на моя отговор, но влиза в повече подробности.

  • Център за разработчици на управлявани доставчици на ADO.NET и DataSet:
    включва, наред с други неща, индекс на наличните доставчици на бази данни ADO.NET.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Достъп до уеб услугата от съхранената процедура на Oracle

  2. проблем ORA-00001:нарушено уникално ограничение идва при INSERT/UPDATE

  3. Как да създадете обект oracle.sql.ARRAY?

  4. Списък с NLS параметри в базата данни на Oracle

  5. Поправете „Приложението „SQLDeveloper.app“ не може да бъде отворено.“