Сохранять данные из приложения С#

Недавно я изучил некоторые С# и написал клон Yahtzee. Мой следующий шаг (теперь, когда логика игры на месте и работает правильно) заключается в интеграции некоторого метода хранения статистики во всех играх.

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


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

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

Ответы

Ответ 1

Вот одна идея: используйте Xml Serialization. Создайте структуру данных 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 довольно просто - просмотрите этот вопрос для примера кода.

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

В этой ситуации атрибут [Serializable] в классном стиле Stats и XmlSerializer - это путь, IMO.