Database SQL minimo C #


12

Sto lavorando a un piccolo progetto (non di produzione) in cui ho bisogno di archiviare abbastanza dati che qualcosa come un CSV sarebbe inefficace da elaborare e un server SQL / MySQL sarebbe troppo. .Net ha un modo per archiviare in modo efficiente diverse voci di dati con la possibilità di eseguire query senza dover gestire e connettersi a un server piuttosto che caricare ed elaborare un singolo file.


Se hai già un server di database attivo e funzionante, creare un altro database è piuttosto banale. Se stai utilizzando solo i dati, potresti prendere in considerazione Access.
Brad

@ Brad è solo un progetto personale e al momento non eseguo alcun server di database a casa mia. Il tuo suggerimento su Access potrebbe essere esattamente quello che sto cercando.
David,

4
Non sono un fan di Access , ma concederò a volte la soluzione giusta a volte. Hai considerato la serializzazione degli oggetti ? Basta creare un oggetto e scriverlo in un file. (L'oggetto potrebbe essere a List<foo>)
Dan Pichelman,

Volete che questi persistano o devono solo essere in memoria?
Richard,

1
@ David: 4000 voci - così poche? Perché non tenerli tutti in memoria? Se hai solo bisogno di un database in memoria per eseguire alcune query, senza strumenti di amministrazione, un set di dati con alcuni dati (persistenti in un file) può essere sufficiente per le tue esigenze.
Doc Brown,

Risposte:


15

Ci sono alcune alternative, in nessun ordine particolare:

  1. Tutte le versioni di (a pagamento?) Visual studio vengono fornite con SQL Server Express installato . Puoi usarlo.
  2. (Ugh) file XML
  3. SQL Server CE (in sostanza, SQL locale tramite file)
  4. SQLite

Altre idee qui: /programming/3639846/what-is-a-good-embedded-database-to-use-with-c


Voglio davvero qualcosa che sia totalmente autonomo in un singolo eseguibile, senza DLL e senza software di terze parti. Uno dei precedenti, ad eccezione di XML, è in grado di soddisfare queste esigenze?
David,

Forse puoi incorporare le dll nel tuo eseguibile.
Sklivvz,

Beh, immagino che la parte più importante non sia che servizi di terze parti * come MSSQL / MySQL si adattino al 3 ° o al 4 ° posto
David

Non ricordo se SQL CE ha un runtime separato o meno. SQLite no, ma può essere un po 'complicato da configurare con un progetto .NET.
GalacticCowboy,

3
Vorrei aggiungere che LocalDB è un'opzione. Vedi questa risposta: stackoverflow.com/questions/9655362/…
Andy

4

Oltre alle opzioni offerte da Sklivvz , non abbiate paura di avventurarvi al di fuori del regno SQL e utilizzare un motore di database orientato agli oggetti incorporato, come Sterling o DB4O .

Offrono i vantaggi di essere piccoli e basati su file, integrabili nella tua applicazione, ma sono anche molto veloci e facili da programmare.


3

SQLite sarebbe la tua migliore opzione.
Come scritto sul loro sito:

SQLite è una libreria software che implementa un motore di database SQL transazionale autonomo, senza server, a configurazione zero.

Sembra davvero quello che stai cercando!

C'è anche un pacchetto Chocolatey se sei troppo pigro per scaricarlo e installarlo da solo!


2

ADO.NET può serializzare su XML e ha quasi tutte le funzionalità di un RDBMS. (Beh, quelli economici, comunque.)

So che è "Vecchio" e ho guardato in basso, ora, ma ADO.NET funziona davvero bene per quello che stai descrivendo. Fa anche un lavoro abbastanza decente nel tenere traccia delle modifiche non impegnate.

Potrebbe essere "Vecchio", ma non è certamente "Rotto". Tuttavia, ha un ingombro di memoria abbastanza pesante, quindi la tua chiamata su questo. 4000 record non saranno un problema.


potresti approfondire il "footprint di memoria pesante"?
David,

@David - Significa che l'intero set di dati verrebbe tenuto in memoria e non solo i record restituiti da una query. Se si disponesse di un database di 4 milioni di record, tenerlo tutto in un set di dati ADO.NET sarebbe un'attrazione seria per le risorse, mentre un RDBMS "reale" lo terrebbe su un disco fino a quando non viene richiesto un sottoinsieme di essi. 4000 dischi sono un piccolo starnuto nell'uso della memoria, quindi non me ne preoccuperei.
Wesley Long,

+1, penso che questa sia l'opzione migliore, per questi requisiti anche qualcosa di piccolo come SQLlite sembra essere un grande sforzo.
Doc Brown,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.