C # минимальная база данных SQL

12

Я работаю над небольшим проектом (не производственным), где мне нужно хранить достаточно данных, чтобы что-то вроде CSV было бы неэффективным для обработки, а сервер SQL / MySQL был бы слишком большим. Есть ли у .Net способ эффективно хранить несколько записей данных с возможностью запроса без необходимости управлять и подключаться к серверу, а скорее загружать и обрабатывать один файл.

Дэвид
источник
Если у вас уже есть запущенный сервер баз данных, создание другой базы данных довольно тривиально. Если вы используете только данные, возможно, вы могли бы рассмотреть доступ.
Брэд
@Brad - это всего лишь личный проект, и в настоящее время у меня дома нет серверов баз данных. Ваше предложение Access, возможно, именно то, что я ищу.
Дэвид
4
Я не фанат Access , но я иногда даю правильное решение. Вы рассматривали сериализацию объектов ? Просто создайте объект и запишите его в файл. (Объект может быть List<foo>)
Дэн Пичельман
Вы хотите, чтобы они сохранялись или они должны быть только в памяти?
Ричард
1
@ Давид: 4000 записей - так мало? Почему бы не держать их всех в памяти? Если вам просто нужна база данных в памяти для выполнения некоторых запросов без каких-либо инструментов администрирования, то для ваших нужд может быть достаточно набора данных с некоторым набором данных (сохраненным в файле).
Док Браун

Ответы:

15

Есть несколько альтернатив, в произвольном порядке:

  1. Все версии (платные?) Visual Studio поставляются с установленным SQL Server Express . Вы можете использовать это.
  2. (Тьфу) XML файлы
  3. SQL Server CE (в основном, локальный SQL через файл)
  4. SQLite

Больше идей здесь: /programming/3639846/what-is-a-good-embedded-database-to-use-with-c

Sklivvz
источник
Я действительно хочу что-то полностью автономное в одном исполняемом файле, без DLL и стороннего программного обеспечения. Может ли что-либо из перечисленного, кроме XML, удовлетворить эти потребности?
Дэвид
Вы можете вставить dll в ваш исполняемый файл, может быть.
Sklivvz
Ну, я думаю, что самая важная часть - это отсутствие сторонних * сервисов, таких как MSSQL / MySQL, которые подойдут # 3 или # 4
David
Я не помню, имеет ли SQL CE отдельную среду выполнения или нет. SQLite не делает, но может быть немного сложно настроить проект .NET.
GalacticCowboy
3
Я бы добавил, что LocalDB - это вариант. Смотрите этот ответ: stackoverflow.com/questions/9655362/…
Энди
4

В дополнение к опциям, которые предлагает Sklivvz , не бойтесь выходить за пределы области SQL и использовать встроенный объектно-ориентированный механизм баз данных, такой как Sterling или DB4O .

Они имеют небольшие размеры и основаны на файлах, встраиваются в ваше приложение, но также очень быстры и просты в программировании.

Эрик Кинг
источник
3

SQLite будет вашим лучшим вариантом.
Как написано на их сайте:

SQLite - это программная библиотека, которая реализует автономный, безсерверный, транзакционный механизм базы данных SQL с нулевой конфигурацией.

Кажется действительно то, что вы ищете!

Есть даже пакет Chocolatey, если вам лень скачивать и устанавливать его самостоятельно!

MaxSC
источник
2

ADO.NET может сериализоваться в XML и имеет почти все функциональные возможности СУБД. (Ну, во всяком случае, дешевые.)

Я знаю, что он «старый» и на него смотрят свысока, но ADO.NET действительно хорошо работает именно для того, что вы описываете. Это даже делает довольно приличную работу по отслеживанию не совершенных изменений.

Это может быть "Старый", но это, конечно, не "Busted". Однако у него довольно большой след памяти, так что ваш призыв к этому. 4000 записей не будут проблемой.

Уэсли Лонг
источник
не могли бы вы уточнить «большой след памяти»?
Дэвид
@David - это означает, что весь набор данных будет храниться в памяти, а не только записи, которые вы возвращаете из запроса. Если у вас есть база данных с 4 миллионами записей, хранение всего этого в наборе данных ADO.NET будет серьезным использованием ресурсов, тогда как «реальная» СУБД будет хранить ее на диске до тех пор, пока вы не запросите их подмножество. 4000 записей - это небольшое чихание в использовании памяти, так что я бы не волновался об этом.
Уэсли Лонг
+1, я думаю, что это лучший вариант, для этих требований даже что-то маленькое, как SQLlite, кажется, много усилий.
Док Браун