Раздел «Технологии программирования».DBInCSharp:

Базы данных в С#

Это руководство посвящено использованию баз данных в языке программирования C#. Хотелось бы рассмотреть простенький пример с подключением базы данных и заполнением ее содержимым объектов ArrayList.

Наша БД будет представлять таблицу с тремя колонками:

ключевое поле, столбцы английских слов и их переводов. Сортировка по английскому алфавиту.

ШАГ 1. Описание используемых библиотек

System.Collections Содержит интерфейсы и классы, определяющие различные наборы объектов, таких, как queues, arrays, hashtables and dictionaries. Нам из этого понадобится ArrayList.

System.Data Этот namespace в основном состоит из классов NET, позволяющих создавать объекты из различных источников данных. Самый интересный - класс DataTable. Объекты этого класса используются для представления таблиц.

System.Data.OleDb Провайдер данных для OLE DB (OLE - это технология доступа к данным любых типов посредством Component Object Model). Namespace описывает коллекцию классов, используемых для доступа к источнику базы данных.

ШАГ 2. Подключаем базу данных

Классы и конструкторы, которые будут описаны ниже – все являются членами одного класса DbClass. С конструктора последнего и начнем.

public DbClass(string dbpath)
{
   string strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbpath;
      /* Строка с производителем драйвера и адресом источника БД */

   string strSQL = "";
   OleDbConnection myConn = new OleDbConnection(strDSN);
      /* Создаваемый объект представляет собой уникальную связь с 
         источником базы данных. В случае системы клиент/сервер это 
         эквивалентно интернет-соединению с сервером) */

   OleDbDataAdapter myCmd = new OleDbDataAdapter( strSQL, myConn );
      /* Создаем объект типа OleDbDataAdapter. Он служит мостом 
         между источником БД и DataSet. DataSet - это пространство 
         в виртуальной памяти, выделенное под "будущие" БД. */

   myConn.Open();
      /* Открываем базу данных */

   DataSet dtSet = new DataSet();
      /* Выделили место под БД */

   myCmd.Fill(dtSet, "vocmain" );
   DTable = dtSet.Tables[0];
      /* Добавляем таблицу "vocmain" и записываем ее в DTable */

   myConn.Close();
      /* Закрыли БД */
}

ШАГ 3. Класс «Пара» и кое-что еще

«Пара» - это пара слов: английское и его перевод. Тут все просто.

public class Pare
{
   public string English;
   public string Russian;
   public Pare(string eng, string rus)
   {
      this.English = eng;
      this.Russian = rus;
   }
}

Изюминка. Считываем слова из БД.

public Pare getNext()
{
   if (counter >= DTable.Rows.Count) return null;
      /* А не вышел ли счетчик за пределы тыблицы? */

   string eng, rus;
   eng = (DTable.Rows[counter])["english"].ToString();
   rus = (DTable.Rows[counter])["russian"].ToString();
      /* Записываем в строки eng и rus слова из БД: в eng – из 
         столбца с пометкой "english", в rus - из столбца с пометкой "russian" */

   this.counter = this.counter + 1;
      /* Инкрементируем счетчик */

   return (new Pare(eng, rus));
      /* Возвращаем пару: английское слово-перевод */
}

ШАГ 4. Заполняем ArrayList

Это самое простое.

   ArrayList wordsEng = new ArrayList();
   ArrayList wordsRus = new ArrayList();
      /* Создали два массива под столбцы английских и русских слов */

   a = new DbClass(dbPath)
      /* Об этом говорилось выше */

   Pare temp = null;
      /* Создали пару, пока что пустую */

   while( (temp = a.getNext()) != null )
      /* Пока не прошли по всем парам в БД… */
   {
      wordsEng.Add(temp.English);
      wordsRus.Add(temp.Russian);
         /* …в соответствующий ArrayList добавляем слова из БД */
   }

Вот и все дела! Успехов!

-- IgorMirzov? - 22 May 2005