Хранить данные из приложения C # - PullRequest
15 голосов
/ 21 августа 2008

Я недавно начал изучать C # и написал клон Yahtzee. Мой следующий шаг (теперь, когда игровая логика установлена ​​и функционирует правильно), - это интегрировать некоторый метод ведения статистики во все сыгранные игры.

У меня такой вопрос, как мне хранить эту информацию? Моей первой мыслью было бы использовать базу данных, и у меня было ощущение, что ответ я получу ... если это так, можете ли вы указать мне хороший ресурс для создания и доступа к базе данных из приложения C #?


Хранение в XML-файле на самом деле имеет для меня больше смысла, но я подумал, что если я предположу, что меня разлучат;). Я привык к созданию веб-приложений, и текстовые файлы обычно не одобряются.

Итак, что касается XML-файла, какие классы мне следует рассмотреть, чтобы можно было легко манипулировать?

Ответы [ 9 ]

16 голосов
/ 21 августа 2008

Вот одна идея: использовать сериализацию 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();
}
13 голосов
/ 21 августа 2008

База данных, вероятно, была бы излишней для чего-то подобного - начните с хранения вашей информации в XML-документе (или серии XML-документов, если данных много). Вы получаете все эти изящные средства развертывания XCopy, вы все еще можете использовать LINQ, и это будет плавный переход к базе данных, если вы позже решите, что вам действительно нужна производительная логика реляционных запросов.

7 голосов
/ 21 августа 2008

База данных может быть излишней - вы думали о том, чтобы просто сохранить результаты в файле?

Если вы решили использовать базу данных, вы можете рассмотреть SQLite , которую вы можете распространять как файл. Существует поставщик .NET с открытым исходным кодом - System.Data.SQLite - который включает в себя все необходимое для начала работы.

Доступ к базе данных в .NET и чтение из нее довольно просты - посмотрите на этот вопрос для примера кода.

4 голосов
/ 21 августа 2008

SQL Express от MS - отличная бесплатная, облегченная версия их базы данных SQL Server. Вы можете попробовать это, если пойдете по маршруту БД.

В качестве альтернативы вы можете просто создать наборы данных в приложении и сериализовать их в xml или использовать что-то вроде недавно созданного Entity Framework , поставляемого с .NET 3.5 SP1

3 голосов
/ 21 августа 2008

Я не знаю, нужна ли вам база данных. Это может быть излишним для хранения статистики для такой простой игры, как эта. Базы данных хороши; но вы не должны автоматически использовать его в каждой ситуации (я предполагаю, что это клиентское приложение, а не онлайн-игра).

Лично для игры, которая существует только на компьютере пользователя, я просто храню статистику в файле (XML или бинарный - выбор зависит от того, хотите ли вы, чтобы он был читаемым человеком или нет).

2 голосов
/ 21 августа 2008

Я бы порекомендовал сохранить ваши данные в простых POCO и сериализовать их в xml или двоичный файл, как это делал Брайан выше.

Если вам нужна база данных, я бы предложил Sql Server Compact Edition или VistaDB . Оба находятся в вашем приложении inproc.

1 голос
/ 21 августа 2008

Для этой ситуации, атрибут [Serializable] в хорошо смоделированном классе Stats и XmlSerializer - путь, ИМО.

1 голос
/ 21 августа 2008

Я бы порекомендовал просто использовать базу данных. Я бы рекомендовал использовать LINQ или инструмент ORM для взаимодействия с базой данных. Для изучения LINQ я бы посмотрел посты Скотта Гатри. Я думаю, что их 9 вместе. Я связал часть 1 ниже. Если вы хотите использовать инструмент ORM, скажем, nhibernate, то я бы порекомендовал посмотреть скриншоты Summer of nHibernate. Это действительно хороший учебный ресурс для nhibernate.

Я не согласен с использованием XML. Имея статистику по большому количеству данных, вы не сможете победить, используя реляционную базу данных. Да, XML является легковесным, но есть много вариантов и для легких реляционных баз данных, кроме того, что идет с полноценной реализацией на основе сервисов. (т. е. SQL Server Compact , SQLite и т. д.) *

1 голос
/ 21 августа 2008

Вы можете использовать пространство имен System::Xml или пространство имен System::Data. Первый дает вам необработанный XML, второй дает вам удобную оболочку для XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...