Каков наилучший способ хранения данных в приложении С#

Вопрос:Я хочу сделать приложение Cookbook для хранения и чтения (и обновления) рецептов или всего остального, чтобы заниматься программированием и мышлением ООП. Но, я не уверен, какой способ хранения данных, в данном случае, рецептов, является лучшим в С# (Visual Studio Express). Я хочу оптимизировать сохранение и загрузку данных в программу, но у меня нет опыта. Каков

Вопрос:

Я хочу сделать приложение Cookbook для хранения и чтения (и обновления) рецептов или всего остального, чтобы заниматься программированием и мышлением ООП. Но, я не уверен, какой способ хранения данных, в данном случае, рецептов, является лучшим в С# (Visual Studio Express).
Я хочу оптимизировать сохранение и загрузку данных в программу, но у меня нет опыта. Каков наилучший способ? Это через XML, SQL или просто TXT? Или каким-то другим способом?

Лучший ответ:

Я бы предложил использовать localDB в SqlExpress.

Microsoft® SQL Server® 2012 Express – мощный и надежный бесплатный система управления данными, которая обеспечивает богатый и надежный хранилище данных для облегченных веб-сайтов и настольных приложений.

http://technet.microsoft.com/en-us/library/hh510202.aspx

Вы также можете посмотреть этот аналогичный вопрос.

Здесь как статья о XML против DB, которая показывает, что XML теряет почву.

Ответ №1

Если вы еще этого не сделали, было бы лучше начать с ввода/вывода XML файла, прежде чем попасть в что-то слишком продвинутое.

Обычно вы должны читать и записывать файлы, используя следующий метод для получения пути:

string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

Итак, если вы хотите хранить свои данные в папке “Cookbook” и файле под названием “recipes.xml”, вы можете сделать следующее:

string dataPath = Path.Combine(appDataPath, «Cookbook»); string recipesFileFullPath = Path.Combine(dataPath, «recipes.xml»);

Это дает вам путь как C:UsersJohnAppDataLocalCookbookrecipes.xml или нечто подобное, которое вы можете передать в функции ввода и вывода файлов.

Затем вы можете начать с классов пространства имен System.IO, таких как File и FileStream, чтобы узнать, как правильно открывать и читать/записывать файлы.

Затем следующий шаг более высокого уровня должен передать эти потоки файлов тому, что используется для чтения и записи XML для объектов, таких как Linq to XML (класс XDocument), который является предпочтительным. Или старше XmlSerializer.

Edit:

Вот пример кода для создания объекта и сохранения его в XML файле:

public class RecipeBook { public List<Recipe> Recipes { get; set; } public RecipeBook() { Recipes = new List<Recipe>(); } } public class Recipe { public DateTime LastModified { get; set; } public DateTime Created { get; set; } public string Instructions { get; set; } } public void SomeFunction() { RecipeBook recipeBook = new RecipeBook(); var myRecipe = new Recipe() { Created = DateTime.Now, LastModified = DateTime.Now, Instructions = «This is how you make a cake.» }; recipeBook.Recipes.Add(myRecipe); var doc = new XDocument(); using (var writer = doc.CreateWriter()) { var serializer = new XmlSerializer(typeof(RecipeBook)); serializer.Serialize(writer, recipeBook); } doc.Save(recipesFileFullPath); }

Вам просто нужно разбить этот код на структуру, которая работает для вас. Например, если вы создавали приложение Windows Forms, то RecipeBook будет частной переменной-членом вашей основной формы. В конструкторе вы можете построить строку recipesFileFullPath и сохранить ее как частную переменную-член. В событии Form.Loaded вы можете проверить, существует ли XML файл и если он его загружает. Если нет, вы создадите новый класс RecipeBook, который будет пустым. Вероятно, вы, вероятно, только сериализуете и сохраняете, когда пользователь нажимает кнопку сохранения или когда возникает событие Form.Closing.

ИЗМЕНИТЬ

Для десериализации и чтения из файла вы можете сделать следующее:

var serializer = new XmlSerializer(typeof(RecipeBook)); using (var fs = new FileStream(recipesFileFullPath)) { RecipeBook book = (RecipeBook)serializer.Deserialize(fs); } Ответ №2

попробуйте использовать SQLite, облегченную портативную базу данных
http://www.sqlite.org/

Ответ №3

Лучше всего использовать Sql Server Compact 1).

Это потому, что он встроен в ваше приложение, и вам не нужно устанавливать дополнительные библиотеки при развертывании и т.д. Также это хорошая точка хранения простых табличных данных.

Ответ №4

Это зависит от того, сколько данных будет храниться в приложении, и как вы хотите искать эти данные.

Для меньших объемов данных будет использоваться обычный текстовый файл, содержащий XML och JSON. Для больших объемов данных я рекомендую SQL-сервер или базу данных NOSQL (MongoDB или Raven).

Ответ №5

Это зависит от многих вещей, в основном от количества рецептов, которые вы планируете иметь, и если вы хотите, чтобы они могли искать, сортировать или стилизовать рецепты.

Текстовые файлы – самый простой способ. Вы можете добавить некоторые простые функции поиска и заказа.

Если он в этих сотнях, вы можете обойтись с помощью xml и сериализатора. Это позволит вам позже использовать рецепты, и это дает данные некоторую структуру. Если ваши рецепты входят в тысячи, этот способ может стать кошмаром.

Лучший способ – это база данных. Sql Server Compact – это бесплатный вариант, который хорошо сочетается с С# через нечто вроде Entity Framework. Эта опция займет много времени, если вы еще не знакомы с базами данных или инфраструктурой ado.net или сущности.

Оцените статью
Добавить комментарий