Domanda

ho fatto una domanda qualche tempo fa su quale DB locale aveva ragione per la mia situazione. Avevo bisogno di accedere al database sia da codice .NET e VB6. La risposta è stata travolgente SQLite. Tuttavia, ho deciso di passare su SQLite, perché l'unico provider OLE DB per fa pagare royalties per ogni copia distribuita del mio software. Si richiede inoltre una procedura di attivazione per essere eseguito su ogni singolo PC.

Dopo aver valutato altre opzioni (SQL Server Compact Edition - a malapena funzionale provider OLE DB, Firebird - non vogliono pagare per un altro driver, ecc ...), sono giunto alla conclusione che l'unica scelta praticabile è utilizzando i file MDB creati da Microsoft Access (o il motore Jet).

Non ho usato da quando fine degli anni '90, quindi non ho a chi ha esperienza con esso le seguenti domande.

  1. Hanno risolto il problema in cui il database avrebbe corrotto e poi ogni ora.
  2. L'accesso al MDB da C # compiuta tramite l'OLE DB Provider ADO.NET o c'è una soluzione nativa (io non riesco a trovarlo).
  3. Esiste una valida alternativa per l'editor di SQL davvero scadente in Access?

Grazie.

È stato utile?

Soluzione

Invece di andare "indietro" per Access, mi piacerebbe restare con SQLite e utilizzare il provider System.Data.SQLite per l'accesso ai dati SQLite all'interno del codice .NET.

Poi avevo appena creare un semplice classe .NET di interoperabilità COM per l'utilizzo da parte VB6 che avvolge qualsiasi funzionalità di accesso ai dati SQLite richiesto. Infine, proprio riferimento e usarlo come un oggetto COM standard dal vostri progetti VB6.

La mia conoscenza di Access è probabilmente un po 'datato e viziate da esperienze negative, ma entro limiti ragionevoli vorrei provare la maggior parte delle altre opzioni prima di ricorrere al percorso di accesso.

Altri suggerimenti

Avete considerato SQL Server 2008 Express Edition (come opporsi a SQL Server CE)?

1) Personalmente, ho trovato che la maggior parte delle volte che Access DB corrotto è stato a causa di codice che non pulire dopo è di per sé, o c'era una scheda di rete difettosa coinvolti.

2)

string connectionString = @“Provider = Microsoft.Jet.OLEDB.4.0; " + 
                          @"Data Source = C:\data\northwind.mdb; " +
                          @"User Id = guest; Password = abc123”


using (OleDbConnection oleDbConnection = New OleDbConnection())
{
    oleDbConnection.ConnectionString = connectionString;

    oleDbConnection.Open();

    ...
}

3) di SQL Server 2008 Express Edition

corruzione MDB è in gran parte a causa di errori che si verificano nelle macchine client, file server e reti, mentre il database è aperto. Se si mette il MDB su una condivisione di file è sempre un rischio, se su un disco rigido locale e utilizzato da un utente i problemi sono molto più rari.

non mi aspetto SQLite per essere diverso, e se qualcosa di peggio.

Periodicamente esecuzione JetComp.exe (un download Microsoft) risolverà molti problemi e tabelle di indice compatti e così via. I backup sono importanti, non importa quello che si utilizza.

Non hai bisogno di MS Access a tutti di utilizzare Jet MDB. Ci sono alcuni strumenti 3rd party per la progettazione dello schema del database e fare query interattive, sia a riga di comando e GUI.

Dato che il formato MDB è più o meno deprecato, il vostro 90s conoscenze in ritardo è abbastanza aggiornato. Vedere questa pagina MSDN

Si potrebbe anche provare SQL Anywhere che gira su diversi sistemi operativi e ha una piccola orma. Lavora per me:)

AngryHacker chiesto:

Q1. Hanno risolto il problema in cui il database avrebbe corrotto e poi ogni ora.

Ehm, che cosa?

Non c'è mai stato alcun problema corruzione in applicazioni correttamente progettati correttamente dispiegati in ambienti adeguatamente mantenuto. Non ho visto un MDB danneggiato in 3 o 4 anni, e ho decine di mie applicazioni in uso in produzione a tempo pieno di molti clienti in molti diversi tipi di ambienti operativi.

Credo che la maggior parte delle persone che soffrono la corruzione sono quelli che cercano di condividere un file MDB tra molti utenti (se dividere o unsplit). Dal momento che non si sta pensando di utilizzare Access, che non è davvero un problema.

Q2. l'accesso al MDB da C # si ottiene tramite l'OLE DB Provider ADO.NET o c'è una soluzione nativa (non riesco a trovarlo).

La soluzione nativa sarebbe DAO, ma questo è COM, per cui non si potrebbe desiderare di utilizzare tale. Da C #, direi OLE DB è la soluzione migliore, ma non è la mia area di competenza in modo da prendere con un grano di sale. Credo che Michael Kaplan ha riferito che il / provider OLEDB Jet ADO è thread-safe, mentre DAO non è. Questo non vuol dire che ci ha consigliato di ADO / OLE DB sopra DAO, però, ma i suoi commenti è venuto anche in un contesto di accesso, e non C #.

Q3. Esiste una valida alternativa per l'editor di SQL davvero scadente in Access?

Perché si prevede di utilizzare che quando non sta usando Access? È possibile utilizzare qualsiasi editor di SQL ti piace il tempo che si prova che lo SQL si scrive è compatibile con il dialetto SQL Jet.

Io, per esempio, non vedo qual è il problema con l'editor SQL di accesso (diverso l'impossibilità di impostare la dimensione del carattere), ma poi, scrivo molto del mio SQL utilizzando il QBE e non mai anche guardare la visualizzazione SQL.

Per rispondere alla tua domanda per quanto riguarda l'editor di SQL davvero scadente in Access - Sono pienamente d'accordo. Il carattere puzza, MSAccess sempre riformatta male la query, a volte aggiunge in metacaratteri che rompono il mio SQL, e, infine ma worstly, se non in grado di analizzare il codice SQL, esso non consente di avere accesso ad essa!

La mia soluzione è quella di utilizzare codice esterno. Io uso DAO per istanziare MSAccess e può quindi modificare direttamente le query utilizzando il QueryDefs. Esso consente di fare la maggior parte delle cose - creare, rinominare, modificare, ecc Ci sono un paio di cose che non si può fare in questo modo anche se -., Ad esempio, non è necessario l'accesso ai metadati di query (descrizione, nascosto, etc)

codice esterno è grande anche perché si può costruire una serie di casi di test, specificando i valori di ritorno attesi, ecc.

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