Banco de dados SQL mínimo em C #

12

Estou trabalhando em um pequeno projeto (não em produção) em que preciso armazenar dados suficientes para que algo como um CSV seja ineficiente para processar e um servidor SQL / MySQL seja demais. O .Net tem alguma maneira de armazenar com eficiência várias entradas de dados com a capacidade de consultar sem precisar gerenciar e conectar-se a um servidor, em vez de carregar e processar um único arquivo.

David
fonte
Se você já possui um servidor de banco de dados em funcionamento, criar outro banco de dados é bastante trivial. Se você estiver usando apenas os dados, talvez considere o Access.
Brad
@ Brad, este é apenas um projeto pessoal e atualmente não corro nenhum servidor de banco de dados em minha casa. Sua sugestão do Access talvez seja exatamente o que estou procurando.
David
4
Não sou fã do Access , mas às vezes concordo que seja a solução certa. Você já considerou a serialização de objetos ? Basta criar um objeto e gravá-lo em um arquivo. (O objecto pode ser um List<foo>)
Dan Pichelman
Você quer que eles persistam ou eles só precisam estar na memória?
Richard
1
@ David: 4000 entradas - tão poucos? Por que não guardá-los todos na memória? Se você precisar apenas de um banco de dados na memória para fazer algumas consultas, sem nenhuma ferramenta administrativa, um conjunto de dados com alguma tabela de dados (persistida em um arquivo) pode ser suficiente para suas necessidades.
Doc Brown

Respostas:

15

Existem algumas alternativas, em nenhuma ordem específica:

  1. Todas as versões do (pago?) Visual studio vêm com o SQL Server Express instalado . Você pode usar isso.
  2. Arquivos XML (Ugh)
  3. SQL Server CE (basicamente, SQL local via arquivo)
  4. SQLite

Mais ideias aqui: /programming/3639846/what-is-a-good-embedded-database-to-use-with-c

Sklivvz
fonte
Eu realmente quero algo totalmente independente em um único executável, sem DLLs e sem software de terceiros. Alguma das alternativas acima, exceto XML, é capaz de atender a essas necessidades?
David David
Você pode incorporar as DLLs no seu executável, talvez.
Sklivvz
Bem, eu acho que a parte mais importante é nenhum terceiro * serviços como MSSQL / MySQL seria # 3 ou # 4 ajuste que
David
Não me lembro se o SQL CE tem um tempo de execução separado ou não. O SQLite não, mas pode ser um pouco complicado de configurar com um projeto .NET.
GalacticCowboy
3
Eu acrescentaria que o LocalDB é uma opção. Veja esta resposta: stackoverflow.com/questions/9655362/…
Andy
4

Além das opções oferecidas pelo Sklivvz , não tenha medo de se aventurar fora do domínio SQL e use um mecanismo de banco de dados orientado a objetos incorporado, como Sterling ou DB4O .

Eles oferecem as vantagens de serem pequenos e baseados em arquivos, incorporáveis ​​ao seu aplicativo, mas também são muito rápidos e fáceis de programar.

Eric King
fonte
3

SQLite seria sua melhor opção.
Conforme escrito em seu site:

O SQLite é uma biblioteca de software que implementa um mecanismo de banco de dados transacional independente, sem servidor e com configuração zero.

Parece realmente o que você está procurando!

Existe até um pacote Chocolatey se você estiver com preguiça de baixar e instalar você mesmo!

MaxSC
fonte
2

O ADO.NET pode serializar para XML e possui quase toda a funcionalidade de um RDBMS. (Bem, os mais baratos, pelo menos.)

Sei que é "Velho" e menosprezado, agora, mas o ADO.NET funciona muito bem exatamente para o que você está descrevendo. Ele ainda faz um trabalho bastante decente de rastrear alterações não confirmadas.

Pode ser "Velho", mas certamente não é "Preso". No entanto, ele tem uma pegada de memória bastante pesada, então é sua escolha. 4000 registros não serão um problema.

Wesley Long
fonte
você poderia elaborar uma "pegada de memória pesada"?
David
@ David - Significa que a totalidade do conjunto de dados seria mantida na memória, e não apenas os registros retornados de uma consulta. Se você tivesse um banco de dados de 4 milhões de registros, manter tudo em um conjunto de dados do ADO.NET seria um grande atrativo para os recursos, enquanto um RDBMS "Real" o manteria em um disco até você consultar um subconjunto deles. 4000 registros é um pequeno espirro no uso da memória, então eu não me preocuparia.
Wesley Long
+1, acho que essa é a melhor opção, pois esses requisitos até mesmo algo pequeno como o SQLlite parecem ser muito trabalhosos.
Doc Brown