Как подключить Firebird в C# или «жарптица в решете»
Понедельник, Март 29th, 2010 | Программирование
У меня в институте на лабах активно используется СУБД Firebird, уж не знаю чем она так хороша. В основном, мне приходилось пользоваться этой СУБД через различные визуальные редакторы (по типу IBExpert, кстати не менее отвратное создание), позволяющие редактировать таблицы не окунаясь в дебри специфики Firebird’овского SQL.
Недавно мне пришлось поближе познакомиться с этой СУБД (в реальных проектах я бы ни за что на свете не стал ее использовать), но сами понимаете, лабы есть лабы и их надо делать
.
Ладно, долю не конкретизированного негатива я выдал
, пора бы по делу что-нибудь сказать.
В этой статье я подробно расскажу как подключить СУБД Firebird к программе написанной на C#.
Хочу сразу заметить, что на удивление капризный характер самой СУБД практически не сказался на способе ее подключения к C# программе.
Сервер СУБД Firebird представлен в двух ипостасях: серверная форма (возможно удаленное и локальное подключение) и в виде dll (так называемая, embedded версия – возможно только локальное подключение с указанием пути до файла *.FDB).
Для подключение к данной СУБД в программе на C# необходимо скачать NETProvider (выберите саму последнюю версию), он представляет из себя dll. Далее необходимо добавить эту библиотеку в качестве Reference к проекту в Microsoft Visual Studio. Теперь стало доступно пространство имен из библиотеки FirebirdSql.
Итак, дальше идут различия для двух «воплощений» Firebird: серверной и embedded.
Если вас интересует серверная, то скачать последнюю версию можно здесь (выберите под какой ОС хотите ее использовать, например если из под windows, то зайдите в папку firebird-win32 или firebird-win64 в зависимости от версии windows) имя файла будет выглядеть примерно так Firebird-*.*.*.*****_*_Win32_***_***.exe
Если вас интересует firebird embedded, то скачать последнюю версию можно здесь (выберите под какой ОС хотите ее использовать, например если из под windows, то зайдите в папку firebird-win32 или firebird-win64 в зависимости от версии windows) имя файла будет выглядеть примерно так Firebird-*.*.*.****-*_Win32_embed_***_***.zip
Далее к исходному коду добавляем:
using FirebirdSql.Data.FirebirdClient;
using FirebirdSql.Data.Isql;Для подключения к СУБД необходимо создать класс FbConnection. В качестве параметра конструктора необходимо передать ConnectionString – строка, в которой задаются параметры соединения с БД. Для ее формирования можно воспользоваться классом FbConnectionStringBuilder.
Вот пример того как это можно сделать используя embedded версию СУБД:
FbConnectionStringBuilder csb = new FbConnectionStringBuilder();
// Указываем тип используемого сервера
csb.ServerType = FbServerType.Embedded;
// Путь до файла с базой данных
csb.Database = "C:\\EMPLOYEE.FDB";
// Настройка параметров "общения" клиента с сервером
csb.Charset = "WIN1251";
csb.Dialect = 3;
// Путь до бибилиотеки-сервера Firebird
// Если библиотека находится в тойже папке
// что и exe фаил - указывать путь не надо
csb.ClientLibrary = @"dlls\fbembed.dll";
// Настройки аутентификации
csb.UserID = "SYSDBA";
csb.Password = "masterkey";Следующим шагом является осуществление соединения с БД, делается это при помощи ранее упомянутого класса FbConnection (т.к. теперь есть ConnectionString, то можно подключиться к БД), делается это вот так:
// Создаем класс-соединения
// здесь csb.ToString() - сформированная строка соединения
using (FbConnection fbBD = new FbConnection(csb.ToString()))
{
// открываем соединение
fbBD.Open();
...
// здесь находиться ваш код взаимодействия с БД
...
// закрываем соеднинение с БД
fbBD.Close();
}Выполнение SQL запросов производиться через класс FbCommand, а в качестве разбора результата запроса можно использовать класс FbDataReader. Выглядит это следующим образом:
// Первый параметр - SQL запрос
// Второй параметр - ссылка на класс FbConnection
FbCommand sqlReqest = new FbCommand("select name, fio, tel from delivers",
fbBD);
// Выполняем запрос
using (FbDataReader r = sqlReqest.ExecuteReader())
{
// Читаем результат запроса построчно - строка за строкой
while (r.Read())
{
// Обращение к данным полей запроса осуществляется по их номеру в
// запросе, в данном случае 0 - name, 1 - fio, 2 - tel
string s = r.GetString(0) + " " + r.GetString(1) + r.GetString(2);
}
}Если вы собираетесь выполнять запросы изменяющие данные/структуру БД (запросы insert, delete, update, alter и т.д.), то вам придется использовать транзакции, реализуемые через класс FbTransaction. Создается он следующим образом:
// Здесь fbBD - объект типа FbConnection
FbTransaction transact = fbBD.BeginTransaction();Все SQL запросы изменяющие содержимое БД должны выполнятся внутри транзакции, для того чтобы это сделать достаточно передать созданный класс транзакции в конструктор SQL запроса, делается это вот так:
// Здесь fbBD - класс FbConnection
// transact - класс транзакци FbTransaction
FbCommand sqlReqest = new FbCommand("delete from table1", fbBD, transact);После того как вы внесете все изменения в БД вам необходимо их сохранить, для этого надо закрыть транзакцию (это надо сделать до закрытия соединения с БД), делается это так:
transact.Commit();Подведем итог, общий вид приложения:
using FirebirdSql.Data.FirebirdClient;
using FirebirdSql.Data.Isql;
...
public void WorkWithBD()
{
...
FbConnectionStringBuilder csb = new FbConnectionStringBuilder();
// Указываем тип используемого сервера
csb.ServerType = FbServerType.Embedded;
// Путь до файла с базой данных
csb.Database = "C:\\EMPLOYEE.FDB";
// Настройка параметров "общения" клиента с сервером
csb.Charset = "WIN1251";
csb.Dialect = 3;
// Путь до бибилиотеки-сервера Firebird
// Если библиотека находится в тойже папке
// что и exe фаил - указывать путь не надо
// Если используется не embedded - эта строчка не нужна
csb.ClientLibrary = @"dlls\fbembed.dll";
// Настройки аутентификации
csb.UserID = "SYSDBA";
csb.Password = "masterkey";
...
// Создаем класс-соединения
// здесь csb.ToString() - сформированная строка соединения
using (FbConnection fbBD = new FbConnection(csb.ToString()))
{
// открываем соединение
fbBD.Open();
...
// Создаем транзакцию
FbTransaction transact = fbBD.BeginTransaction();
...
// Первый параметр - SQL запрос
// Второй параметр - ссылка на класс FbConnection
// Третий - транзакция
FbCommand sqlReqest =
new FbCommand("select name, fio, tel from delivers",
fbBD, transact);
// Выполняем запрос
using (FbDataReader r = sqlReqest.ExecuteReader())
{
// Читаем результат запроса построчно - строка за строкой
while (r.Read())
{
// Обращение к данным полей запроса осуществляется по
// их номеру в запросе, в данном случае
// 0 - name, 1 - fio, 2 - tel
string s = r.GetString(0)+" "+r.GetString(1)+r.GetString(2);
}
}
...
// Подтверждаем транзакцию
transact.Commit();
...
// закрываем соеднинение с БД
fbBD.Close();
}
...
}UPD. При подключении NetProvider’а для FireBird могут возникнуть ошибки совместимости версий .Net Framework. Это связано с тем что ваш проект и NetProvaider скомпилирован под разные версии famework’a. Чтобы избавить от данной ошибки, в настройках проекта укажите версию .Net Framework 3.5.
Данная статья – всего лишь ступенька, с которой вы сможете начать работу с СУБД Firebird.
Ряд полезных ссылок, из которых вы сможете почерпнуть не все, но многое:
- DotNetFirebird (Using Firebird SQL in .NET)
- Ветка форума: C# + Firebird
Удачи!
Свежие записи
Наиболее интересные
- Взлом паролей пользователей ОС Windows - 61 голосов,




(4.82) - Как поставить Windows и Linux Ubuntu на нетбук - 27 голосов,




(4.96) - Чтение и запись в XML фаил (C#) - 24 голосов,




(4.75) - Решение СЛАУ. Метод Гаусса с выбором главного элемента - 19 голосов,




(4.37) - Можно ли играя в Линейку (Lineage II) заработать реальных денег? - 16 голосов,




(3.44) - Назначение клавиши Scroll Lock! А вы знаете зачем она? - 15 голосов,




(4.67) - Нахождение НОД и НОК без лишних слов - 14 голосов,




(4.21) - Раздавая файлы через торренты можно заработать?! - 13 голосов,




(3.15) - Как подключить Firebird в C# или «жарптица в решете» - 11 голосов,




(4.55) - Генерация лабиринта - 10 голосов,




(5.00)
Рубрики
- Закладки (4)
- Из жизни (34)
- Linux (6)
- Заработок (6)
- Игры (3)
- Тайм менеджмент (2)
- Программирование (52)
- Юмор (7)
Архивы
- Январь 2011 (3)
- Декабрь 2010 (2)
- Сентябрь 2010 (13)
- Август 2010 (4)
- Июль 2010 (5)
- Июнь 2010 (7)
- Апрель 2010 (6)
- Март 2010 (11)
- Февраль 2010 (24)
- Январь 2010 (12)
- Октябрь 2009 (1)
- Сентябрь 2009 (1)





