Domanda

sto iniziando con un database SQL Server. Quindi sembrerebbe che dovrei usare System.Data.SqlClient namespace. Ma, c'è una possibilità che potremmo chiudere il nostro database SQL Server e andare a MySql o Oracle. Per questa ragione, vengo con una serie di norme su come le nostre applicazioni .Net potranno comunicare con il database, in modo da rendere più facile la migrazione ad un sistema di database diverso in futuro, se avevamo bisogno di farlo.

Così qui sono gli standard:

  1. Utilizzare un ORM, se possibile (ad esempio NHibernate) (No LINQ come solo supporta SqlServer, ma per quanto riguarda Entity Framework e il suo sostegno Oracle e MySql?)
  2. Se ORM è un over-kill, quindi utilizzare le query SQL con parametri.
  3. Utilizzare le stored procedure solo per una lunga esecuzione o azioni complesse che devono essere eseguite sul banca dati.

Il che mi porta al mio questione principale a portata di mano. Quale namespace dovrei usare per codificare il mio DAL?

A me sembra che la scelta è tra System.Data.ODBC e System.Data.OleDB:

  • Quali sono i compromessi?
  • È uno preferito sopra l'altro?
  • Quali sono i vostri pensieri circa i primi 3 standard?
È stato utile?

Soluzione

System.Data.SQLClient

Si collega a SQL Server 2000 e versioni successive, ma si ottengono prestazioni ottimali durante la connessione a tali database.

System.Data.OledbClient

Si collega a SQL 6.5

OleDbClient vi dà la capacità di connettersi a altri database come Oracle o Access. Ma per lavorare con SQL Server si ottengono prestazioni migliori utilizzando SQLClient.

. Nota: Per il collegamento a Oracle, Microsoft ha anche OracleClient

System.Data.ODBCClient

Si collega al solo database legacy, utilizzando i driver ODBC. (Ad esempio MS Access 97).

fonte originale

Altri suggerimenti

Si desidera utilizzare il driver di SQL Server. Capisco quello che sta cercando di fare, ma il modo in cui avrebbe compiuto supportare più database è con l'inserimento di un altro strato di astrazione. Si può fare questo molti modi. Ma si inserisce il codice specifico database al bordo della vostra gerarchia di classe. Pertanto, ogni classe può ottenere i benefici di funzionalità specifiche del database, ma i chiamanti di livello superiore non so o cura che cosa database viene usato sotto. Per quanto ORM, preferisco LLBLGen , ma questa è solo la mia preferenza.

Inoltre, tanto per chiarire, LINQ non è specifico di SQL Server. Questo è LINQ to SQL. LINQ è una tecnologia di query che è possibile utilizzare in LINQ to SQL, LINQ to Entities, LINQ-to-oggetti, e persino LLBLGen supporta LINQ.

Non importa se si utilizza SQLClient o ODBC per ora, se si utilizzano le stored procedure o altre caratteristiche specifiche del database, si dovrà riscrivere quelli se si cambia motori di database.

mi basta usare SqlClient e ri-scrittura / ri-generare il DAL se è cambiato.

A meno che non hai intenzione di implementare e testare su più piattaforme in questo momento, non sono sicuro lo sforzo supplementare in questo momento è un grande affare o meno che lo sforzo di rifare il DAL, e il fatto che hai ottenuto un DAL affatto significa che hai tutto in un posto per un cambiamento poi comunque.

Se hai qualche sentore che ti verrà scambiando database (o supporto di più backend), allora un ORM è la strada da percorrere. In caso contrario, si dovrà ancora di refactoring / riscrivere un sacco di vostro DAL al fine di sostenere il cambiamento. Se la vostra applicazione è piccola, non sarà male, ma nulla di sostanziale e sarete male.

Troverete che l'utilizzo di SQL Server lo SqlClient è molto più veloce e più facile da svilupparsi con oltre OleDB e ODBC - a meno che non è molto probabile che sarà necessario per supportare più piattaforme troverete che i benefici superano i rischi che si vuole bisogno di riscrivere il vostro DAL.

Inoltre, utilizzando OleDB / ODBC è solo 1 modo di mantenere l'indipendenza della piattaforma - si può trovare più efficace per avere più implementazioni del vostro DAL, ciascuno utilizzando un nativo client per la piattaforma in uso

.

Ho sentito dire che a meno che non si tratta di una caratteristica fondamentale, non si deve preoccupare troppo di mantenere l'indipendenza dalla piattaforma. Detto questo,

SQLClient vi darà l'accesso nativo e dovrebbe essere più performante (che non ha a che fare qualsiasi astrazioni / traduzioni).

L'unica cosa che dovete cambiare per ottenere OLE DB di lavoro vs ODBC è la stringa di connessione. OLE DB ha un po 'più di intelligenza sul lato client in modo che offre migliori prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top