пятница, 23 декабря 2011 г.

Красивый код Firebird в Visual Studio 2010 (оператор Select)

Я довольно давно уже работаю с Firebird в Visual Studio и хочу поделится с вами примером кода который я постоянно использую, ну возможно с небольшими вариациями. По моему мнению код выглядит достаточно красиво.


Для новичков я расскажу как создать консольное приложение с использованием Firebird:


1. Создаем новое простое консольное приложение. По-умолчанию его код будет выглядеть так:




2. Добавляем ссылку на сборку Firebird:




3. Указываем файл Firebird. Его можно скачать с сайта Firebirdsql.org




4. Дописываем в секции using код:
using FirebirdSql.Data.FirebirdClient;






5. Дописываем код main, так чтобы он принял вид: 

Code Snippet
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Data;
  5. using System.Text;
  6. using FirebirdSql.Data.FirebirdClient;
  7.  
  8. namespace ConsoleApplication1
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             // Строка подключения
  15.             string ConStr = ""; // ваша строка подключения
  16.             using (FbConnection fbc = new FbConnection(ConStr))
  17.             {
  18.                 try
  19.                 {
  20.                     fbc.Open();
  21.                 }
  22.                 catch (Exception ex)
  23.                 {
  24.                     Console.WriteLine(ex.Message,
  25.                         System.IO.Path.GetFileName(
  26.                         System.Reflection.Assembly.GetExecutingAssembly().Location));
  27.                     return;
  28.                 }
  29.  
  30.                 // Транзакция
  31.                 FbTransactionOptions fbto = new FbTransactionOptions();
  32.                 fbto.TransactionBehavior = FbTransactionBehavior.NoWait |
  33.                      FbTransactionBehavior.ReadCommitted |
  34.                      FbTransactionBehavior.RecVersion;
  35.                 FbTransaction fbt = fbc.BeginTransaction(fbto);
  36.  
  37.                 // Создаем простой запрос
  38.                 string SQL = "select * from myTable Where Speed=@Speed";
  39.                 FbCommand fbcom = new FbCommand(SQL, fbc, fbt);
  40.                 fbcom.Parameters.Clear();
  41.                 fbcom.Parameters.AddWithValue("Speed", 100);
  42.  
  43.                 // Создаем адаптер данных
  44.                 FbDataAdapter fbda = new FbDataAdapter(fbcom);
  45.  
  46.                 DataSet ds = new DataSet();
  47.  
  48.                 try
  49.                 {
  50.                     fbda.Fill(ds);
  51.                 }
  52.                 catch (Exception ex)
  53.                 {
  54.                     Console.WriteLine(ex.Message,
  55.                         System.IO.Path.GetFileName(
  56.                         System.Reflection.Assembly.GetExecutingAssembly().Location));
  57.                     return;
  58.                 }
  59.                 finally
  60.                 {
  61.                     fbt.Rollback();
  62.                     fbc.Close();
  63.                 }
  64.  
  65.                 DataTable dt = ds.Tables[0];
  66.  
  67.                 if (dt.Rows.Count == 0) return;
  68.                 for (int i = 0; i < dt.Rows.Count; i++)
  69.                 {
  70.                     DataRow dr = dt.Rows[i];
  71.  
  72.                     if (dr.IsNull("ID") == false)
  73.                     {
  74.                         // необходимые действия
  75.                         Int32 id = Convert.ToInt32(dr["ID"]);
  76.                         
  77.                     }
  78.                 }
  79.             }
  80.         }
  81.     }
  82. }






6. Разбор полетов:
6.1 Этот пример не будет работать пока переменной ConStr не будет присвоена реальная строка подключения к базе данных.
6.2 В этом коде предусмотрен блок try-catch при подключении к базе. В случае невозможности установки соединения, программа или текущий метод завершится.
6.3 Блок кода заключен в блок using, что гарантирует высвобождение ресурсов.
6.4 Второй аргумент в методе WriteLine выводит имя текущего файла.
6.5 После подключения начинается транзакция с указанными параметрами.
6.6 Для получения данных через DataSet используется адаптер данных, однако есть возможность использовать FbDataReader, но мне кажется при работе с большими выходными наборами лучше использовтаь именно адаптер данных. Т.к.сразу после заполнения данных адаптером, соединение с базой данных можно закрыть.
6.7 В качестве примера я привел SQL код с одним параметром Speed.
6.8 После любого (ошибочного иди верного) выполнения команды Fill адаптера данных транзакция откатывается и соединение закрывается.
6.9 Возможно после сообщений об ошибках вам будет удобнее добавить команду Console.ReadLin();


Вот такой пример работы с Firebird на базе оператора Select.

воскресенье, 27 ноября 2011 г.

Внедрение поддержки базы данных Firebird 2.5 в Visual Studio 2010

Поддержка Firebird для вашей студии может быть реализована двумя способами: руками или с помощью инсталятора. Инсталяторов не так много, предлагаю воспользоваться этим. Данный инсталятор разрабатывался и проверялся мной лично на Windows Xp и 7.
Для тех, кто привык делать всё руками ниже подробная инструкция.

Я расскажу по пунктам как реализовать в Visual Studio 2010 поддержку баз данных Firebird. В частности в любой редакции Visual Studio можно использовать Firebird, но в редакции Express есть ограничения, которые не позволяют использовать визуальный редактор. Поэтому в этой статье установка на Visual Studio 2010 Express рассматриваться не будет. Подразумевается что сервер базы данных Firebird уже установлен на ваш компьютер.

1. Заходим на сайт Firebird, заходим в раздел Download, выбираем NET Provider. Или можно просто перейти по этой ссылке.
1.1 Скачиваем архив NETProvider-2.6.5.zip
1.2 Скачиваем архив FirebirdDDEXProvider-2.0.5.zip

2. Распаковываем архивы
3. Необходимо установить сборки Firebird в GAC, причем в Windows 7 это сложнее чем в Windows XP.
2.1 В Windows XP нажимаем ПУСК-> Выполнить, вводим ASSEMBLY, нажимаем Enter. Перетаскаваем файлы в окно Assembly.
2.2 В Windows 7 открываем меню пуск в командное окно вводим CMD.
2.2.1 Вводим команду chdir "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools"


Если ваша ОС установлена на другой диск, скорректируйте путь.

2.2.2 Устанавливаем в GAC сборку FirebirdSql.Data.FirebirdClient.dll.
Для этого вводим команду gacutil -i "D:\VISUAL STUDIO PROJECTS\Firebird\NETProvider-2.6.5\FirebirdSql.Data.FirebirdClient.dll"


2.2.3 Устанавливаем в GAC сборку FirebirdSql.Data.FirebirdClient.dll.
Для этого вводим команду gacutil -i "D:\VISUAL STUDIO PROJECTS\Firebird\FirebirdDDEXProvider-2.0.5\FirebirdSql.VisualStudio.DataTools.dll"


2.2.4 Установка dll завершена.

3. Теперь нужно отредактировать файл machine.config, в моем случае он находится по пути: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config

4. Открываем этот файл блокнотом

5. Находим секцию
<configuration>
  <configsections>

6. Добавляем строчку:
<section name="firebirdsql.data.firebirdclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

7. Прокручиваем вниз до секции:
<system.data>
    <dbproviderfactories>

8. Добавляем в эту секцию строчку:
<add description=".Net Framework Data Provider for Firebird" invariant="FirebirdSql.Data.FirebirdClient" name="FirebirdClient Data Provider" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c">

9. Сохраняем файл. Всё это действительно для версии 2.6.5

10. Открываем файл D:\VISUAL STUDIO PROJECTS\Firebird\FirebirdDDEXProvider-2.0.5\reg_files\VS2010\FirebirdDDEXProvider64.reg блокнотом.

11. Находим строчку, которая содержит %path% и меняем его на полный путь к файлу  FirebirdSql.VisualStudio.DataTools.dll

"CodeBase"="D:\\VISUAL STUDIO PROJECTS\\Firebird\\FirebirdDDEXProvider-2.0.5\\FirebirdSql.VisualStudio.DataTools.dll"

12. Сохраняем этот файл, запускаем его. На запрос добавить информацию в реестр нажимаем ДА.

13. Установка завершена.

14. Запускаем Visual Studio.

15. Создаем новый проект Windows Forms.

16. Добавляем данные в проект.








Как видите всё работает. Осталось нажать ОК. И создастся типизированный набор данных для базы данных.

Работа далее ни чем не отличается от работы с любой другой базой данных.

воскресенье, 20 февраля 2011 г.

Visual Studio 2010 - создание службы Windows шаг за шагом

Чтобы написать службу, необходим определенный опыт программирования.
Однако мои инструкции помогут даже новичкам.

1.Открываем Visual Studio, создаем проект Windows Service.

2. На экране окажется пустой дизайнер. Переключимся в режим кода. Нажмем для этого правой кнопкой мыши и выберем View Code.

3. Окно уже будет содержать два обработчика события: OnStart и OnStop. Первый выполняется при запуске службы, второй при остановке. Также можно использовать другие обработчики событий: при выключении, при изменении статуса питания (для ноутбуков), пауза и восстановление и возможен перехват сессии.

4. В блок USING добавим ссылку на System.Threading.

5. Создадим новую процедуру которая будет выполняться при запуске службы. Назовем её MyProcess.

6. Необходимость в этом объясняется тем, что на каждое действие службы не должно уходить более 30сек даже не самом медленном компьютере. Поэтому я рекомендую в обработчике запуска службы создавать только новый поток и запускать его на выполнение. Все функциональность вкладывать в новый поток.

7. Напишем процедуру, которую будем выполнять в другом потоке. Например: Я хочу чтобы при старте сервис загружал RSS с lenta.ru и отображал его в гриде в окне.

8. Добавляем в службу Windows Form.


9. Кладем на форму DataGridView, устанавливаем свойство Anchor в Top, Bottom, Left, Right.


10. Устанавливаем у компонента DataGridView свойство Modifiers = Public.

11. Переходим в редактор кода службы и пишем следующий код:


12. Дописываем обработчик OnStart()


13. Переходим на дизайнер службы. Добавляем инсталер.


14. Выделяем ServiceProcessInstaller и меняем Account с User на LocalSystem


15. Значния ServiceInstaller ставим как на рисунке



16. Наша служба почти готова. С помощью ServiceProcessInstaller служба будет устанавливаться в систему. После этого она появится с списке служб.

17. Имейте в виду, чтобы служба могла взаимодействовать с пользователем, нужно чтобы была отмечена галочка "Разрешить взаимодействие с рабочим столом". По-умолчанию после установки службы - эта галочка всегда снята.


18. Сделаем это программно. Снова выделяем ServiceProcessInstaller, переходим к событиям. Находим там Commited и создаем для него обработчик события.


19. Добавим ссылку using System.Management;

20. Напишем следующий код:


21. Обратите внимание, я пробовал использовать прямой редактор реестра. Этот код закомментирован. Он не работает. Не используйте его. Вместо этого используйте ManagementObjectSearcher как показано выше

22. Собираем решение. F6.

23. Открываем папку с фрамеворком. Копируем оттуда файл InstalUtil.exe в папку с вашей службой.


24. Создаем пустой текстовый файл. Заполняем его следующим текстом:
InstallUtil.exe WindowsService1.exe

25. Сохраняем под именем Install.bat. (Чтобы можно было назначить тип файла, в свойствах папки должна стоять галочка, отображать имена для зарегистрированных типов файлов).

26. Создаем ещё один текстовый файл. Заполняем его следующим текстом:
InstallUtil.exe /U WindowsService1.exe

27. Сохраняем под именем Uninstall.bat.

28. Создаем ещё один текстовый файл. Заполняем его следующим текстом:
net start MyRSS

29. Сохраняем под именем Start.bat.

30. Создаем ещё один текстовый файл. Заполняем его следующим текстом:
net stop MyRSS

31. Сохраняем под именем Stop.bat.

32. Запускаем Install.bat
33. Запускаем Start.bat

34. Через опр.время должна появиться форма:

вторник, 18 января 2011 г.

Firebird быть или не быть.

Кажется совсем недавно я был ещё начинающим программистом.
Приходилось решать задачи автоматизации бизнеса, а какой бизнес без базы данных.

Большинство из нас хотим чтобы все было подешевле.
А что собственно есть.

Вот несколько:

1. Microsoft Access
2. SQL Server Express
3. Firebird

Каждая из этих из баз бесплатна с несколькими ограничениями. Пожалуй только Firebird в этом списке ограничений почти не имеет.

Что мы имеем с MS Access:
1. База растет как на дрожжах. Но можно сделать - сжать - восстановить.
2. Используется файловый доступ - при любом удобном случае база грохается. Благо стандартным MS Access можно попытаться её восстановить.
3. Медленный SQL.
4. Не особо сильная функциональность.
5. Огромный плюс. Не нужны никакие драйвера. Виндовс есть - значит база будет работать. Даже установленный Microsoft Office не нужен. Ваше приложение все равно будет работать с mdb.
6. Редактор базы данных - MS Access.

Что мы имеем с SQL Server Express:
1. Ограничения 1 ГБ ОЗУ, 1 ядро процессора, размер базы до 4 ГБ. Не плохо.
2. Можно выбрать 3 варианта редакции Express: обычную, with tools и advanced.
Самая большая весит примерно 800 МБ.
Успешно на Windows 7 ставиться только SQL Server 2008 R2.
3. Отличная функциональность.
4. Отличная скорость работы.
5. Есть полнотекстовый поиск, репликация, поля Geography, Geometry, Xml. Встроенная репликация и отчеты, которые можно встроить в веб сервер.
5. Редактор базы данных - Management Studio (есть в редакции WithTools и Advanced). Бесплатный редактор, не самый функциональный, но хоть что-то.

Что мы имеем с Firebird:
1. На настоящий момент самая последняя версия 2.5 Скачать Firebird 2.5
2. Размер дистрибутива от 6 МБ!
3. Отличная функциональность.
4. Отличная скорость работы.
5. Маленький размер базы (хорошая компактность).
6. Редактор базы данных - IBExpert. Советую именно его. Однако он платный.

Это лишь краткий список характеристик баз.
Для небольших приложений я бы советовал все таки MS Access. Мне в нем нравится что можно в таблицу вставить данные почти из любой базы данных или буфера обмена.

Для более серьезных SQL Server или Firebird. Если размер базы данных может оказаться более 4ГБ то лучше выбрать Firebird, т.к. у него нет ограничения на размер базы.