Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menjaga agnostik database aplikasi (ADO.NET vs enkapsulasi logika DB)

Catatan: Jawaban ini relevan jika Anda memutuskan untuk menggunakan fungsionalitas dasar ADO.NET 2 alih-alih ORM (seperti Entity Framework atau NHibernate) atau LINQ to SQL.

Mari kita asumsikan Anda memiliki string koneksi yang ditentukan di app.config . Anda :

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

Perhatikan keberadaan providerName atribut dan nilainya. Anda juga dapat memasukkan nilai untuk penyedia DB lain, mis. System.Data.SQLite .

(Perhatikan bahwa penyedia non-standar, yaitu yang tidak ada dalam .NET Framework secara default, harus didaftarkan terlebih dahulu, baik di app.config atau di machine.config mesin klien .)

Sekarang, Anda dapat bekerja dengan database yang ditentukan dengan cara yang sepenuhnya agnostik penyedia sebagai berikut:

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

Perhatikan bagaimana kode ini hanya bekerja dengan tipe antarmuka. Satu-satunya tempat di mana Anda menunjukkan penyedia DB tertentu adalah melalui providerName nilai atribut di app.config mengajukan. (Saya telah menandai semua tempat di mana pengaturan dari app.config diambil dengan ^^^ s.)

Bacaan lebih lanjut:

  • Pengodean Umum dengan Kelas dan Pabrik Dasar ADO.NET 2.0:
    mirip dengan jawaban saya, tetapi lebih detail.

  • Penyedia Terkelola ADO.NET dan Pusat Pengembang DataSet:
    termasuk, antara lain, indeks penyedia basis data ADO.NET yang tersedia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah pembaruan SQL akan memengaruhi subquery-nya selama pembaruan dijalankan?

  2. urutan oracle hibernasi menghasilkan celah besar

  3. Bagaimana saya bisa mendapatkan jumlah hari antara 2 tanggal di Oracle 11g?

  4. Mengapa Oracle.ManagedDataAccess tidak berfungsi ketika Oracle.DataAccess berfungsi?

  5. DBCA Buat Database buruk REMOTE_LISTENER