9. Добавьте в проект класс DatabaseAccess, удалите из него весь добавленный по умолчанию код в окне редактора класса, и введите вместо него код из листинга 14.6.
10. Добавьте в проект класс GameData, удалите из него весь добавленный по умолчанию код в окне редактора класса, и введите вместо него код из листинга 14.7.
11. Добавьте в проект класс VocabularyWord, удалите из него весь добавленный по умолчанию код в окне редактора класса, и введите вместо него код из листинга 14.8.
12. Запустите приложение, нажав клавишу <F5>. Пользовательский интерфейс приложения должен выглядеть примерно так, как показано на рис. 14.4. Щелкните на кнопке buttonCreateDatabase для создания и наполнения данными базы данных SQL СЕ. Щелкните на кнопке buttonGameData с целью загрузки содержимого базы данных в память для последующего использования; в результате этого в текстовом окне должны отобразиться слова из словаря.
Рис. 14.4. Пример управления данными не с помощью объектов DataSet
Листинг 14.5. Пример пользовательского управления данными — код, помещаемый в форму Form1.cs
//Создает базу данных
private void buttonCreateDatabase_Click(object sender, System.EventArgs e) {
DatabaseAccess.CreateAndFillDatabase();
}
//Загружает данные из базы данных и отображает их
private void buttonLoadGameData_Click(object sender, System.EventArgs e) {
//Очистить текстовое окно
textBox1.Text = "";
//Загрузить данные для слов
GameData.InitializeGameVocabulary();
//Обойти все слова и добавить их в текстовый список
System.Text.StringBuilder thisStringBuilder;
thisStringBuilder = new System.Text.StringBuilder();
foreach (VocabularyWord thisWord in GameData.AllWords) {
thisStringBuilder.Append(thisWord.EnglishWord);
thisStringBuilder.Append(" = ");
thisStringBuilder.Append(thisWord.GermanWordWithArticleIfExists);
thisStringBuilder.Append("\r\n"); //Новая строка
}
//Отобразить список слов в текстовом окне
textBox1.Text = thisStringBuilder.ToString();
}
Листинг 14.6. Пример кода управления данными для DatabaseAccess.cs
//------------------------------------------------------------
//Код доступа к базе данных
//
//Этот класс управляет доступом к базе данных наших приложений
//------------------------------------------------------------
using System;
internal class DatabaseAccess {
const string DATABASE_NAME = "LearnGerman.sdf";
const string CONNECT_STRING = "Data Source = " + DATABASE_NAME + "; Password = ''";
const string TRANSLATIONTABLE_NAME = "TranslationDictionary";
const string TRANSLATIONTABLE_ENGLISH_COLUMN = "EnglishWord";
const string TRANSLATIONTABLE_GERMAN_COLUMN = "GermanWord";
const string TRANSLATIONTABLE_GERMANGENDER_COLUMN = "GermanGender";
const string TRANSLATIONTABLE_ WORDFUNCTION_COLUMN = "WordFunction";
internal const int DS_WORDS_COLUMNINDEX_ENGLISHWORD = 0;
internal const int DS_WORDS_COLUMNINDEX_GERMANWORD = 1;
internal const int DS_WORDS_COLUMNINDEX_GERMANGENDER = 2;
internal const int DS_WORDS_COLUMNINDEX_WORDFUNCTION = 3;
static public System.Data.IDataReader GetListOfWords() {
System.Data.SqlServerCe.SqlCeConnection conn = null;
conn = new System.Data.SqlServerCe.SqlCeConnection(CONNECT_STRING);
conn.Open();
System.Data.SqlServerCe.SqlCeCommand cmd = conn.CreateCommand();
cmd.ConmandText = "select " +
TRANSLATIONTABLE_ENGLISH_COLUMN + ", " +
TRANSLATIONTABLE_GERMAN_COLUMN + ", " +
TRANSLATIONTABLE_GERMANGENDER_COLUMN + ", " +
TRANSLATIONTABLE_WORDFUNCTION_COLUMN + " " + "from " +
TRANSLATIONTABLE_NAME;
//Выполнить команду базы данных
System.Data.SqlServerCe.SqlCeDataReader myReader =
cmd.ExecuteReader(System.Data.CommandBehavior.SingleResult);
return myReader;
}
//------------------------------------------
//Создает базу данных в случае необходимости
//------------------------------------------
static public void CreateDatabaseIfNonExistant() {
if (System.IO.File.Exists(DATABASE_NAME) == false) {
CreateAndFillDatabase();
}
}
//---------------------------------------
//Создает и наполняет данными базу данных
//---------------------------------------