Ho eseguito un rapido confronto tra i diversi provider costituiti da:
- Esperienza di installazione.
- Connettività.
- Esperienza di Esplora server.
- Aggiornamento dall'esperienza del database (prima il database).
- Mappatura dei tipi di dati (prima il database).
Ecco le conclusioni:
1. Esperienza di installazione.
Oracle's ODP.NET (beta 3):installazione complessa di versioni x86 e x64 separate, programmi di installazione non progettati per Windows. Riempie il percorso di sistema (pericolosamente vicino alla lunghezza massima), non si installa nelle cartelle standard (file di programma + dati app).
DotConnect di Devart:installazione semplice, la DLL del provider è completamente gestita.
Progresso di DataDirect:installazione semplice, la DLL del provider è completamente gestita.
OPENLINK:Sembra richiedere l'installazione lato server, non ho eseguito ulteriori test.
2. Connettività.
ODP.NET di Oracle (beta 3):complicato da configurare, richiede l'installazione di Oracle sul computer client e un file TSN aggiuntivo nell'installazione di Oracle o una stringa di connessione lunga e complessa simile a LISP/Scheme.
Aggiorna: Non è stato possibile trovarlo nella documentazione, tuttavia, la stringa di connessione può contenere anche una semplice definizione dell'origine dati, ad es. nomeserver:porta/nomeservizio.
DotConnect di Devart:stringa di connessione semplice + procedura guidata.
Avanzamento di DataDirect:stringa di connessione semplice + procedura guidata.
3. Esperienza di Esplora server.
ODP.NET di Oracle (beta 3):il più potente dei tre, consente una facile modifica, visualizzazione di chiavi e indici.
DotConnect di Devart:visualizzazione di tabelle e campi.
Avanzamento di DataDirect:consente una facile modifica, visualizzazione di chiavi e indici.
4. Aggiornamento dall'esperienza del database (prima il database).
ODP.NET di Oracle (beta 3):semplice.
DotConnect di Devart:mostra le tabelle di tutti gli schemi, nessuna opzione per filtrare - rende estenuante trovare le tabelle.
Avanzamento di DataDirect:diretto.
5. Mappature dei tipi di dati (prima il database).
Oracle's ODP.NET (beta 3):la mappatura predefinita per numero(1,0), numero(2,0) e numero(3,0) è errata*. Può eseguire l'override manuale per numero(2,0) e numero(3 ,0). La correzione per number(1,0) non funziona (almeno non sulla beta 3 - potrebbe aver funzionato nella beta 2).
Aggiornamento: Ora che è stata rilasciata la versione di rilascio (112030), il problema è stato risolto. Alcune mappature sono possibili tramite la sezione nel file app.config.
DotConnect di Devart:mostra le tabelle di tutti gli schemi, nessuna opzione per filtrare - rende estenuante la ricerca delle tabelle. Mappatura predefinita per float binario, doppio binario, timestamp con fuso orario, numero(2,0), numero(3,0) e numero(4 ,0) sono sbagliati*. L'override manuale dovrebbe funzionare - non verificato.
Avanzamento di DataDirect:le mappature predefinite sono OK*.
(*) Mappature che mi aspettavo:
DB Data Type .NET Data Type
integer Decimal
int Decimal
smallint Decimal
long String
decimal Decimal
rowid String
float Decimal
double Decimal
binary float Single
binary double Double
char[40] String
charvar[40] String
natchar[40] String
natcharvar[40] String
natcharacter[40] String
natcharactervar[40] String
number Decimal
numeric Decimal
nvarchar2[40] String
real Decimal
date DateTime
timestamp DateTime
timestamplocal DateTime
timestampzone DateTimeOffset
xml String
raw15 Binary
raw16 Guid
raw17 Int64
number(1,0) Boolean
number(2,0) Byte or SByte
number(3,0) Byte or SByte (accepted Int16 as OK too)
number(4,0) Int16
number(5,0) Int16 (accepted Int32 as OK too)
number(6,0) Int32
number(7,0) Int32
number(8,0) Int32
number(9,0) Int32
number(10,0) Int32 (accepted Int64 as OK too)
number(11,0) Int64
number(15,0) Int64
number(16,0) Int64
number(17,0) Int64
number(18,0) Int64
number(19,0) Int64 (accepted Decimal as OK too)
number(20,0) Decimal (would accept Int64 as OK too)
number(21+,0) Decimal
Se vuoi che il tipo di database sia in grado di memorizzare qualsiasi numero nell'intervallo di tipi .NET, IntX richiede un numero (N,0) dove Ceil(log10(2^X)) =N per l'archiviazione**.
Bool (Int1) ==> number(1,0)
Byte (Int8) ==> number(3,0)
Int16, UInt16 ==> number(5,0)
Int32, UInt32 ==> number(10,0)
Int64 ==> number(19,0)
UInt64 ==> number(20,0)
** Il calcolo presuppone numeri senza segno, per numeri con segno ceil(log(2^(X-1)).
Riferimenti per ipotesi sui tipi di dati:
TECH in rete
Devart
Oracle