Вопрос:
Я хочу сделать приложение 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 или сущности.