在c#应用程序中存储数据的最佳方法是什么

我想制作Cookbook应用程序来存储和阅读(和更新)食谱,或其他任何东西来练习OOP编程和思考。 但是,我不确定,在这种情况下,以什么方式存储数据,食谱,是c#(Visual Studio Express)中最好的。 我想在程序中优化保存和加载数据,但我没有经验。 什么是最好的方法? 它是通过XML,SQL还是普通的TXT? 或者其他一些方式?

我建议在SqlExpress中使用localDB。

Microsoft®SQLServer®2012Express是一个function强大且可靠的免费数据管理系统,可为轻量级网站和桌面应用程序提供丰富可靠的数据存储。

http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx

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

你也可以看看这个类似的问题 。

这里有一篇关于XML与DB的文章,它显示了XML正在失势。

如果你还没有这样做,最好先进入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:\Users\John\AppData\Local\Cookbook\recipes.xml或类似的C:\Users\John\AppData\Local\Cookbook\recipes.xml ,您可以将其传递给文件输入和输出函数。

然后,您可以开始使用System.IO命名空间类(如FileFileStream来学习如何正确打开和读取/写入文件。

然后,下一个更高级别的步骤是将这些文件流传递给用于读取和写入对象的XML,例如Linq to XML( XDocument类),这是首选方法。 或旧的XmlSerializer

编辑:

下面是一些示例代码,用于创建对象并将其保存到XML文件:

 public class RecipeBook { public List Recipes { get; set; } public RecipeBook() { Recipes = new List(); } } 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窗体应用程序,那么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); } 

尝试使用SQLite它的轻量级可移植数据库http://www.sqlite.org/

您最好的选择是使用Sql Server Compact( http://www.microsoft.com/en-us/sqlserver/editions/2012-editions/compact.aspx 1 )。

这是因为它嵌入了您的应用程序,您不需要在部署等上安装额外的库。此外,它是简单表格数据的良好存储点。

这取决于应用程序将拥有多少数据以及您希望如何搜索该数据。

对于少量数据,包含XML och JSON的纯文本文件可以。 对于大量数据,我推荐SQL服务器或NOSQL数据库(MongoDB或Raven)。

这取决于很多事情,主要是你计划拥有多少食谱,以及你是否希望能够搜索,分类或设计食谱风格。

文本文件是最简单的方法。 您可以添加一些简单的搜索和排序function。

如果它是数百个,你可以使用xml和序列化器。 它允许您稍后对配方进行样式设置,并为数据提供一些结构。 如果你的食谱进入成千上万,这种方式可能会成为一场噩梦。

最好的方法是数据库。 Sql Server Compact是一个免费的选项,可以通过像Entity Framework这样的东西与c#很好地连接。 如果您还不熟悉数据库或ado.net或entity framework,那么此选项将花费最长的时间。