存储来自C#应用程序的数据

时间:2020-03-05 18:41:32  来源:igfitidea点击:

我最近开始学习一些Cand编写的Yahtzee克隆。我的下一步(现在游戏逻辑已经到位并且可以正常运行)是集成一些在所有已玩游戏中保持统计信息的方法。

我的问题是,我应该如何存储这些信息?我的第一个想法是使用数据库,而我的想法就是得到答案……如果是这样,我们能指出我一个很好的资源来从C应用程序创建和访问数据库吗?

对我来说,存储在XML文件中实际上更有意义,但是我认为如果我建议我拆开;)。我习惯于构建Web应用程序,对于这些应用程序,文本文件通常不受欢迎。

那么,对于XML文件,我应该查看哪些类可以轻松进行操作?

解决方案

回答

我们是否考虑过仅将分数存储在文件中而使数据库过大?

如果决定使用数据库,则可以考虑使用SQLite,它可以像文件一样分发。有一个开放源代码.NET提供程序System.Data.SQLite,其中包含我们入门所需的一切。

在.NET中访问和读取数据库非常容易,请看一下示例代码的问题。

回答

首先,将信息存储在XML文档中(如果有大量数据,则存储在一系列XML文档中),数据库可能会变得过分杀伤。我们将获得所有出色的XCopy部署资料,我们仍然可以使用LINQ,如果我们稍后决定确实需要高性能的关系查询逻辑,那么它将平滑过渡到数据库。

回答

我不知道数据库是否一定是我们想要的。对于存储像这样的简单游戏的统计数据,这可能是过大的选择。数据库很好;但是我们不应该在每种情况下都自动使用它(我假设这是一个客户端应用程序,而不是在线游戏)。

就个人而言,对于仅存在于用户计算机上的游戏,我只是将统计信息存储在文件中(XML或者二进制选择取决于我们是否希望它可以被人类阅读)。

回答

MS的SQL Express是其SQL Server数据库的免费,轻量级版本。如果我们走数据库路线,可以尝试一下。

另外,我们可以只在应用程序中创建数据集并将其序列化为xml,也可以使用.NET 3.5 SP1附带的新创建的Entity Framework等东西。

回答

我们可以使用System :: Xml名称空间或者System :: Data名称空间。前者为我们提供原始XML,后者为我们提供XML的便捷包装。

回答

这是一个想法:使用Xml序列化。设计GameStats数据结构,并根据需要使用Xml属性来影响架构。我喜欢将这种方法用于小型数据集,因为它快速简便,而我要做的就是设计和操纵数据结构。

using (FileStream fs = new FileStream(....))
{
    // Read in stats
    XmlSerializer xs = new XmlSerializer(typeof(GameStats));
    GameStats stats = (GameStats)xs.Deserialize(fs);

    // Manipulate stats here ...

    // Write out game stats
    XmlSerializer xs = new XmlSerializer(typeof(GameStats));
    xs.Serialize(fs, stats);

    fs.Close();
}

回答

我建议只使用数据库。我建议使用LINQ或者ORM工具与数据库进行交互。为了学习LINQ,我将看一下Scott Guthrie的帖子。我认为总共有9个人。我在下面链接了第1部分。如果我们想使用ORM工具,例如说nhibernate,那么我建议我们查看一下Summer of nHibernate截屏视频。对于nhibernate来说,它们是一个非常好的学习资源。

我不同意使用XML。通过报告大量数据的统计数据,我们无法使用关系数据库。是的,XML是轻量级的,但是轻量级关系数据库除了基于完全成熟的基于服务的实现外,还有很多选择。 (即SQL Server Compact,SQLite等...)

  • LINQ上的Scott Guthrie
  • nHibernate的夏天

回答

我建议将数据保存在简单的POCO中,然后像上面的Brian一样将它们序列化为xml或者二进制文件。

如果我们对数据库很热,我建议使用Sql Server Compact Edition或者VistaDB。两者都在应用程序中托管inproc。

回答

在这种情况下,IMO可以采用建模良好的Stats类和XmlSerializer上的[Serializable]属性。