【问题标题】:Store data from a C# application存储来自 C# 应用程序的数据
【发布时间】:2010-09-06 09:51:59
【问题描述】:

我最近开始学习一些 C# 并编写了一个 Yahtzee 克隆。我的下一步(现在游戏逻辑已经到位并正常运行)是整合一些方法来保持所有游戏的统计数据。

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


存储在 XML 文件中实际上对我来说更有意义,但我想如果我建议我会被撕裂;)。我习惯于构建 Web 应用程序,对于那些,文本文件通常不受欢迎。

那么,对于 XML 文件,我应该查看哪些类以便于操作?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    这里有一个想法:使用 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();
    }
    

    【讨论】:

      【解决方案2】:

      对于这样的事情,数据库可能有点过头了 - 首先将您的信息存储在 XML 文档(或一系列 XML 文档,如果有大量数据)中。你得到了所有漂亮的 XCopy 部署东西,你仍然可以使用 LINQ,如果你后来决定你真的需要高性能的关系查询逻辑,这将是一个平稳的过渡到数据库。

      【讨论】:

        【解决方案3】:

        数据库可能是多余的 - 您是否考虑过将分数存储在文件中?

        如果您决定使用数据库,您可以考虑使用SQLite,您可以像分发文件一样分发它。有一个开源 .NET 提供程序 - System.Data.SQLite - 包括您开始使用所需的一切。

        在 .NET 中访问和读取数据库非常简单 - 请查看 this question 以获取示例代码。

        【讨论】:

          【解决方案4】:

          来自 MS 的SQL Express 是他们 SQL Server 数据库的免费、轻量级版本。如果你走 DB 路线,你可以试试。

          或者,您可以简单地在应用程序中创建数据集并将它们序列化为 xml,或者您可以使用 .NET 3.5 SP1 附带的新创建的 Entity Framework 之类的东西

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

              如果您对数据库感兴趣,我建议您使用Sql Server Compact EditionVistaDB。两者都托管在您的应用程序中。

              【讨论】:

                【解决方案7】:

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

                我不同意使用 XML。通过报告大量数据的统计信息,您无法使用关系数据库。是的,XML 是轻量级的,但是轻量级关系数据库也有很多选择,除了使用基于服务的完整实现。 (即SQL Server CompactSQLite 等...)

                【讨论】:

                • 不知道为什么你的投票被否决了这么多。在这种情况下,我自己不会去数据库(即使是你描述的轻量级数据库),但你的观点是有效的,有一天原始发帖人可能已经在他的统计数据中添加了足够多的内容,使数据库成为更可用的选项( +1 尝试取消谴责)
                【解决方案8】:

                您可以使用System::Xml 命名空间或System::Data 命名空间。第一个为您提供原始 XML,后者为您提供一个方便的 XML 包装器。

                【讨论】:

                  【解决方案9】:

                  对于这种情况,很好的建模 Stats 类上的 [Serializable] 属性和 XmlSerializer 是要走的路,IMO。

                  【讨论】:

                    猜你喜欢
                    • 2018-12-04
                    • 2012-06-04
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多