Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Utrzymywanie agnostyki bazy danych aplikacji (ADO.NET vs enkapsulacja logiki DB)

Uwaga: Ta odpowiedź jest istotna, jeśli zdecydujesz się użyć podstawowej funkcji ADO.NET 2 zamiast ORM (takiej jak Entity Framework lub NHibernate) lub LINQ to SQL.

Załóżmy, że masz parametry połączenia zdefiniowane w swoim app.config :

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

Zwróć uwagę na obecność providerName atrybut i jego wartość. Możesz również podać wartość innego dostawcy bazy danych, np. System.Data.SQLite .

(Zwróć uwagę, że niestandardowi dostawcy, tj. ci, którzy domyślnie nie są w .NET Framework, muszą być najpierw zarejestrowani, albo w app.config lub w pliku machine.config komputera klienckiego .)

Teraz możesz pracować z określoną bazą danych w sposób całkowicie niezależny od dostawcy w następujący sposób:

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

Zauważ, że ten kod działa tylko z typami interfejsów. Jedynym miejscem, w którym wskazujesz konkretnego dostawcę bazy danych, jest providerName wartość atrybutu w app.config plik. (Zaznaczyłem wszystkie miejsca, w których ustawienie z app.config jest pobierany z ^^^ s.)

Dalsza lektura:

  • Kodowanie ogólne z klasami podstawowymi i fabrykami ADO.NET 2.0:
    podobne do mojej odpowiedzi, ale bardziej szczegółowe.

  • Zarządzani dostawcy ADO.NET i DataSet Developer Center:
    zawiera między innymi indeks dostępnych dostawców baz danych 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 SQL — jak pobrać najwyższe 5 wartości z kolumny

  2. Co i kiedy należy określić setFetchSize()?

  3. Który typ danych platformy .NET najlepiej nadaje się do mapowania typu danych Oracle NUMBER w NHibernate?

  4. Wyłącz, a później włącz wszystkie indeksy tabel w Oracle

  5. Jak tworzyć procedury składowane PL/SQL z parametrami w bazie danych Oracle