2012-03-15 6 views
4

Что было бы лучшим способом хранения данных в приложении форм Windows?Как хранить данные в приложении Windows .net

Я начал проект с использованием SQL с локальным файлом .mdf, но вскоре понял, что при создании установщика и установке в другую систему. Я получаю сообщение об ошибке, когда SQL Server не найден, потому что на этом сервере не установлен SQL.

Целевая система, в которой будет установлено это приложение, не будет установлена ​​SQL.

Так что мой вопрос: что такое норма? Как данные обычно хранятся и доступны в приложениях форм Windows? Это действительно база данных .mdf SQL или какой-либо тип sqlite DB?

Если я могу использовать базу данных SQL (mdf-файл) какого-то рода, без необходимости устанавливать SQL-сервер на каждом клиентском компьютере. Как мне это сделать?

Спасибо!

ответ

7

В настоящее время имеется SQL Server Compact Edition. Это скомпилировано прямо в ваше приложение. Конечным пользователям не потребуется никакая другая версия SQL Sever для использования вашего приложения. См. http://www.microsoft.com/sqlserver/en/us/editions/compact.aspx.

. .
0
.

. Вы можете вставить в установочное приложение приложение ms sql express или сохранить данные, если они невелики в формате xml или ms office acess db.

2

Если вы действительно хотите использовать SQL, вы можете использовать SQL Server Compact edition. Это будет создать файл базы данных, и вы можете использовать его как обычный datbase (с некоторыми исключениями)

http://www.microsoft.com/sqlserver/en/us/editions/compact.aspx

3

Вы должны использовать встроенную базу данных затем. SQL Server Compact Edition - это встроенная база данных. Это википедия ссылка указывает на других встроенных баз данных:

http://en.wikipedia.org/wiki/Embedded_database

Обратите внимание, что не все свободны.

3

Ответ на этот вопрос нетривиальный. Я предполагаю, что вы храните фактический контент, а не только настройки или позиции окна. Первый вариант - использовать один из встроенных сериализаторов для чтения/записи XML или JSON. Или, возможно, использовать один из ServiceStack.

Если вы не можете легко хранить весь контент в памяти, мы можем рассмотреть возможность использования базы данных. Единственный раз, когда я когда-либо использовал супертяжелую базу данных, такую ​​как MS SQL Server или Oracle, был бы там, где у вас есть приложение на уровне предприятия с штатными сотрудниками, которые управляют базами данных.

Для простого хранения файлов в одном приложении вы можете использовать выпуски MS SQL Embedded или Express, но не делайте этого. Это медленно. У него есть глупые ограничения. Вы можете посмотреть в Интернете параметры строки подключения, чтобы указать на локальный файл mdf, если вы действительно хотите спуститься по этой дороге.

Скорее вы должны использовать оболочку Sqlite .NET (теперь управляемую и предоставляемую Sqlite.org). Если вы хотите использовать мелкий ORM, я тоже рекомендую это сделать. Вы можете посмотреть ServiceStack или множество других вариантов на этой арене. (Просто сделайте веб-поиск для легкого .net orm).

0

Помимо других уже упомянутых вариантов, вы можете использовать базу данных MS Access (JET engine). Доступно из коробки, и вы можете легко управлять данными с помощью Access.

1

Вы также можете использовать SQLite - бесплатную библиотеку базы данных, которая хранит данные в текстовых файлах. Существует .NET library для взаимодействия с файлами данных SQLite.

Еще один приятный бонус - это то, что SQLite поддерживается из нескольких языков. SQLite изначально был написан для C/C++, но теперь Python имеет встроенный модуль SQLite. SQLite также широко используется в Java, Ruby и многих других.

1

В основном это зависит от того, какие данные вы хотите сохранить.

Параметры приложения и пользовательские конфигурации - это своего рода данные, хранящиеся в программах. Такие данные обычно хранятся в файлах конфигурации xml или в реестре Windows.

Реальные бизнес-данные намного сложнее и нуждаются в более продвинутом хранилище данных, например в базах данных. Для этого у вас есть несколько вариантов:

  • полнофункциональным движок базы данных, такие как MS SQL Server (Express), MySql или PostgreSQL. Для этих СУБД требуется серверное приложение, которое должно быть установлено на компьютере, на котором должны храниться данные.

  • Встроенный механизм базы данных, такой как SQL Server Compact Edition, или SQLite. Я лично предпочитаю SQLite. Он имеет реализацию .NET (System.Data.SQLite). Эти СУБД не требуют какой-либо установки, и их можно легко развернуть с любым приложением. Хотя у них есть некоторые ограничения, но их достаточно для простых приложений без параллельного доступа к данным.
    Наиболее важными ограничениями SQLite (что я знаю) является то, что он не имеет блокировки уровня строки (только блокировка таблицы) и не имеет никакого внешнего внешнего соединения (только левое внешнее соединение). По умолчанию внешние ограничения по умолчанию отключены. Там первое ограничение как-то снижает чувствительность приложения к одновременному доступу к данным (вставка и обновления). Остальные легко преодолеть.

2

Для встраиваемых СУБД вы не можете пойти неправильно с SQLite, как сво Most Widely Deployed SQL Database на планете. Это файловая RDBMS, которая просто работает, база данных автономна и даже не нужна, поскольку вы можете прозрачно создавать ее на лету.

Это загружаемое из NuGet в 2-х вариантах:

Вот это simple web service example:

using (IDbConnection db = "~/App_Data/db.sqlite".OpenDbConnection()) 
using (IDbCommand dbCmd = db.CreateCommand()) { 

    dbCmd.DropTable<Author>(); 
    dbCmd.CreateTable<Author>(); 

    var authors = new List<Author> { 
      new Author { Name = "Demis Bellot" ... }, 
      new Author { Name = "Angel Colmenares" ... }, 
    }; 
    dbCmd.InsertAll(authors); 

    dbCmd.Select<Author>(q => q.Birthday >= new DateTime(agesAgo, 1, 1) 
      && q.Birthday <= new DateTime(agesAgo, 12, 31)); 
    dbCmd.Select<Author>(q => Sql.In(q.City, "London", "Madrid", "Berlin")); 
    dbCmd.Select<Author>(q => q.Name.StartsWith("A")); 
    dbCmd.Select<Author>(q => q.Name.EndsWith("garzon")); 
    dbCmd.Select<Author>(q => q.Name.ToUpper().EndsWith("GARZON")); 
    dbCmd.Select<Author>(q => q.Name.Contains("Benedict")); 
    dbCmd.Select<Author>(q => q.Eaqings <= 50); 
    dbCmd.Select<Author>(q => q.Rate == 10 && q.City == "Mexico"); 

} 

И в screenshot of the results.

Смежные вопросы