Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Листинг 14.6. Пример кода управления данными для DatabaseAccess.cs
Листинг 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();
}
}
//---------------------------------------
//Создает и наполняет данными базу данных
//---------------------------------------
static public void CreateAndFillDatabase() {
//Удалить базу данных, если она уже существует
if (System.IO.File.Exists(DATABASE_NAME)) {
System.IO.File.Delete(DATABASE_NAME);
}
//Создать новую базу данных
System.Data.SqlServerCe.SqlCeEngine sqlCeEngine;
sqlCeEngine = new System.Data.SqlServerCe.SqlCeEngine(CONNECT_STRING);
sqlCeEngine.CreateDatabase();
//-------------------------------------
//Попытаться подключиться к базе данных
//и наполнить ее данными
//-------------------------------------
System.Data.SqlServerCe.SqlCeConnection conn = null;
try {
conn = new System.Data.SqlServerCe.SqlCeConnection(CONNECT_STRING);
conn.Open();
System.Data.SqlServerCe.SqlCeCommand cmd = conn.CreateCommand();
//Создает таблицу перевода
//Поля:
// 1. Слова на английском языке (English)
// 2. Слова на немецком языке (German)
// 3. Грамматический род (Gender)
// 4. Тип слова
cmd.CommandText = "CREATE TABLE " + TRANSLATIONTABLE_NAME + " (" +
TRANSLATIONTABLE_ENGLISH_COLUMN + " ntext" + ", " +
TRANSLATIONTABLE_GERMAN_COLUMN + " ntext" + ", " +
TRANSLATIONTABLE_GERMANGENDER_COLUMN + " int" + ", " +
TRANSLATIONTABLE_WORDFUNCTION_COLUMN + " int" + ")";
cmd.ExecuteNonQuery();
//Наполнить базу данных словами
FillDictionary(cmd);
} catch (System.Exception eTableCreate) {
System.Windows.Forms.MessageBox.Show("Error occurred adding table :" + eTableCreate.ToString());
} finally {
//Всегда закрывать базу данных по окончании работы
conn.Close();
}
//Информировать пользователя о создании базы данных
System.Windows.Forms.MessageBox.Show("Created langauge database!");
}
static private void FillDictionary(System.Data.SqlServerCe.SqlCeCommand cmd) {
//Глаголы
InsertEnglishGermanWordPair(cmd, "to pay", "zahlen",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Verb);
InsertEnglishGermanWordPair(cmd, "to catch", "fangen",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Verb);
//Добавить другие слова...
//Местоимения
InsertEnglishGermanWordPair(cmd, "What", "was",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Pronoun);
//Добавить другие слова...
//Наречия
InsertEnglishGermanWordPair(cmd, "where", "wo",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adverb);
InsertEnglishGermanWordPair(cmd, "never", "nie",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adverb);
//Добавить другие слова...
//Предлоги
InsertEnglishGermanWordPair(cmd, "at the", "am",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Preposition);
//Имена прилагательные
InsertEnglishGermanWordPair(cmd, "invited", "eingeladen",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Verb);
InsertEnglishGermanWordPair(cmd, "yellow", "gelbe",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adjective);
InsertEnglishGermanWordPair(cmd, "one", "eins",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adjective);
InsertEnglishGermanWordPair(cmd, "two", "zwei",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adjective);
//Имена существительные мужского рода
InsertEnglishGermanWordPair(cmd, "Man", "Mann",
VocabularyWord.WordGender.Masculine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Marketplace", "Marktplatz",
VocabularyWord.WordGender.Masculine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Spoon", "L?ffel",
VocabularyWord.WordGender.Masculine, VocabularyWord.WordFunction.Noun);
//Имена существительные женского рода
InsertEnglishGermanWordPair(cmd, "Woman", "Frau",
VocabularyWord.WordGender.Feminine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Clock", "Uhr",
VocabularyWord.WordGender.Feminine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Cat", "Katze",
VocabularyWord.WordGender.Feminine, VocabularyWord.WordFunction.Noun);
//Имена существительные среднего рода
InsertEnglishGermanWordPair(cmd, "Car", "Auto",
VocabularyWord.WordGender.Neuter, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Book", "Buch",
VocabularyWord.WordGender.Neuter, VocabularyWord.WordFunction.Noun);
}
//----------------------------
//Помещает слово в базу данных
//----------------------------
static private void InsertEnglishGermanWordPair(
System.Data.SqlServerCe.SqlCeCommand cmd,
string englishWord, string germanWord,
VocabularyWord.WordGender germanWordGender,
VocabularyWord.WordFunction wordFunction) {
cmd.CommandText = "INSERT INTO " + TRANSLATIONTABLE_NAME + "(" +
TRANSLATIONTABLE ENGLISH_COLUMN + ", " +
TRANSLATIONTABLE_GERMAN_COLUMN + ", " +
TRANSLATIONTABLE_GERMANGENDER_COLUMN + ", " +
TRANSLATIONTABLE_WORDFUNCTION_COLUMN + ") VALUES ('" +
englishWord + "', '" + germanWord + "', '" +
System.Convert.ToString(((int) germanWordGender))+ "', '" +
System.Convert.ToString(((int) wordFunction)) + "' )";
cmd.ExecuteNonQuery();
}
} //Конец класса
- Высокоуровневый подход, основанный на использовании объектов ADO.NET DataSet
- Низкоуровневый подход, основанный на использовании объектов подключения к данным ADO.NET
- В каких случаях следует использовать объекты ADO.NET DataSet
- Использование классов DataAdapter для организации взаимодействия с базами данных
- Использование файлов и потоков XML для сохранения и передачи данных
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
- Сериализация объектов ADO.NET DataSet с помощью пользовательского кода
- Работа с нетипизированными объектами DataSet
- Перенос типизированных объектов ADO.NET DataSet на мобильные устройства
- Меры по обеспечению максимальной производительности при работе с объектами ADO.NET DataSet
- Листинг 14.3. Сравнение производительности различных вариантов доступа к данным с использованием объектов DataSet
- В каких случаях не следует использовать объекты ADO.NET DataSet
- Листинг 14.4. Результаты тестирования производительности при использовании пользовательского формата данных вместо объектов DataSet
- Пример использования базы данных на устройстве и управления пользовательскими данными
- Листинг 14.5. Пример пользовательского управления данными — код, помещаемый в форму Form1.cs
- Листинг 14.6. Пример кода управления данными для DatabaseAccess.cs
- Листинг 14.7. Пример кода управления данными для GameData.cs
- Листинг 14.8. Пример кода управления данными для VocabularyWord.cs
- Примеры к главе 14 (данные)
- Пример установочного скрипта
- Пример из практики
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Основные "рычаги" управления производительностью
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Категорийный менеджмент. Курс управления ассортиментом в рознице
- Глава 5 Агрессивные формы кода и борьба с ними
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы