Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/75: Рейтинг темы: голосов - 75, средняя оценка - 4.76
0 / 0 / 1
Регистрация: 19.02.2018
Сообщений: 26

Подключение к бд Firebird

12.01.2019, 19:13. Показов 14894. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Переделываю курсовой,переношу бд с MS SQL на Firebird(так надо, только Firebird), и не получается кое что
C#
1
2
string lconnString = fb_con.ToString();
              if (string.IsNullOrEmpty(lconnString))
Эти строчки должны работать так, чтобы lconnString присваивала строку которую получает от fb_con.ToString, а ToString возвращает строку подключения к серверу, но так как fb_con.ToString находится у меня в другом месте,(в отдельном классе в котором я подключаюсь к бд)она не имеет значения.
Как мне сделать так, чтобы она наследовалась.
Вот код подключения:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using FirebirdSql.Data.FirebirdClient;
 
namespace TestingProgram
{
    public partial class ConnectDB : Form
    {
        FbConnection fb;
        public ConnectDB()
        {
            //InitializeComponent();
            FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
            fb_con.Charset = "WIN1251"; //используемая кодировка 
            fb_con.UserID = "SYSDBA";
            fb_con.Password = "masterkey";
            fb_con.Database = @"C:\Users\User\Desktop\TESTS.FDB";
            fb_con.ServerType = 0; //указываем тип сервера (0 - "полноценный Firebird" (classic или super server), 1 - встроенный (embedded)) 
 
            //создаем подключение 
            fb = new FbConnection(fb_con.ToString()); //передаем нашу строку подключения объекту класса FbConnection 
            fb.Open(); //открываем БД
        }
    }
}
Добавлено через 19 минут
База работает, сервер работает, я проверял в другой проге с тем же сервером
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2019, 19:13
Ответы с готовыми решениями:

Подключение к FireBird 3
После перехода на новую версию Firebird 3 Потерялось соединение к базе данных. На 2.5 все работало отлично. Использую...

Подключение к БД (Firebird)
Добрый день! Ранее писал на Delphi и обычно создавался DataModule с FirebirdConnection, который потом использовался во всей программе....

Подключение к FireBird
Люди помогите связать C# NET c FireBird. в Delphi это делается через IB компоненты. создаю подключения а драйвер базы не нахожу. Как...

6
0 / 0 / 1
Регистрация: 19.02.2018
Сообщений: 26
13.01.2019, 23:22  [ТС]
Там раньше была строка getconnectionstring но ее нужно было заменить, потому что она не работала, так как у меня база была уже не ms sql

Добавлено через 9 часов 26 минут
В общем, не стал париться и просто скопировал код подключения во все формы, но теперь другая проблема, не хочет выполнять этот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using (FbConnection connection = new FbConnection(lconnString))
                {
 
                    FbCommand cmd = new FbCommand(@"SELECT * FROM  PARCIPANT", connection);
 
                    try
                    {
 
                        //fb.Open();
                        FbDataReader reader = cmd.ExecuteReader();
                        try
                        {
                            while (reader.Read())
                            {
                            }
                        }
 
                        finally
                        {
                            reader.Close();
                        }
 
                        tabQuestion.Visible = false;
 
                        _TestID = 1;
                        cmbxbind();
 
                        button1.Enabled = false;
                        button2.Enabled = false;
                        button3.Enabled = false;
                        button4.Enabled = false;
                        button5.Enabled = false;
 
                        AutoriseForm form = new AutoriseForm(this);
                        form.Show();
                        form.TopMost = true;
                        form.BringToFront();
                        this.SendToBack();
 
 
                    }
                    catch (FbException ex)
                    {
                        MessageBox.Show("Произошла ошибка при подключении к FB server, проверьте параметры подключения",
                                   "Невозможно подключиться к серверу ");
                        Console.WriteLine(ex.StackTrace);
                        Application.Exit();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Непредвиденное исключение",
                                    "Невозможно подключиться к серверу ");
                        Console.WriteLine(ex.StackTrace);
                        Application.Exit();
                    }
Выводит ошибку "Непредвиденное исключение", может в коде ошибка, не знаю, на sql работал, может кто что знает, поможет?
0
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,357
14.01.2019, 07:18
Цитата Сообщение от faxezad Посмотреть сообщение
В общем, не стал париться и просто скопировал код подключения во все формы,
Правильно. Больше говнокода богу говнокода. Я бы на месте преподавателя этот трэш не принял, даже если бы он работал корректно.

Ни в коем случае не смешивайте код доступа к СУБД и код UI. Вынесите всю работу с СУБД в отдельный класс (группу классов) никак с UI не связанных.

Не прописывайте реквизиты и пути к СУБД в коде, вынесите это всё в файл конфигурации.

Цитата Сообщение от faxezad Посмотреть сообщение
Выводит ошибку "Непредвиденное исключение", может в коде ошибка, не знаю, на sql работал, может кто что знает, поможет?
Умение использовать отладчик (debugger) - обязательное требование к любой личинке программиста.
1
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
14.01.2019, 08:34
Цитата Сообщение от faxezad Посмотреть сообщение
C#
1
public partial class ConnectDB : Form
Это что? Класс подключения к базе от формы наследуем?

Цитата Сообщение от faxezad Посмотреть сообщение
C#
1
fb.Open(); //открываем БД
Зачем в классе подключения в конструкторе сразу же открывать подключение? Ох, а дальше и того "лучше".
Какой-то тихий ужас у Вас происходит, тут даже нечего советовать кроме, как переписать все заново.
0
0 / 0 / 1
Регистрация: 19.02.2018
Сообщений: 26
15.01.2019, 01:39  [ТС]
Usaga, Бог говно-кода нейтрален, но твоя строка натолкнула на мысль и да, нашел ошибку, избавившись от try/catch, но нет, ошибка была не в этом, а в том:
C#
1
2
3
4
using (FbConnection connection = new FbConnection(lconnString))
                {
 
                    FbCommand cmd = new FbCommand(@"SELECT * FROM  PARCIPANT", connection);
Раз уж ты настолько умный, сможешь понять, раз уж так критиковал...

Вот тебе в помощь:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
  private void Form1_Load(object sender, EventArgs e)
        {
            FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
            fb_con.Charset = "WIN1251"; //используемая кодировка 
            fb_con.UserID = "SYSDBA";
            fb_con.Password = "masterkey";
            fb_con.Database = @"C:\Users\User\Desktop\TESTS.FDB";
            fb_con.ServerType = 0; //указываем тип сервера (0 - "полноценный Firebird" (classic или super server), 1 - встроенный (embedded)) 
 
            //создаем подключение 
            fb = new FbConnection(fb_con.ToString()); //передаем нашу строку подключения объекту класса FbConnection 
            fb.Open(); //открываем БД
            //string lconnString = fb_con.ToString();
 
            //if (string.IsNullOrEmpty(lconnString))
            //{
 
            //    MessageBox.Show("Невозможно подключиться к  Fb server, проверьте параметры подключения",
            //                    "Невозможно подключиться к серверу ");
            //    Application.Exit();
            //}
            //else
            //{
 
                //using (FbConnection connection = new FbConnection(lconnString))
                //{
 
                    FbCommand cmd = new FbCommand(@"SELECT * FROM  PARCIPANT", fb);
 
                    //try
                    //{
 
                        //fb.Open();
                        FbDataReader reader = cmd.ExecuteReader();
                        try
                        {
                            while (reader.Read())
                            {
                            }
                        }
 
                        finally
                        {
                            reader.Close();
                        }
 
                        tabQuestion.Visible = false;
 
                        _TestID = 1;
                        cmbxbind();
 
                        button1.Enabled = false;
                        button2.Enabled = false;
                        button3.Enabled = false;
                        button4.Enabled = false;
                        button5.Enabled = false;
 
                        AutoriseForm form = new AutoriseForm(this);
                        form.Show();
                        form.TopMost = true;
                        form.BringToFront();
                        this.SendToBack();
 
 
                //    }
                //    catch (FbException ex)
                //    {
                //        MessageBox.Show("Произошла ошибка при кодключении к FB server, проверьте параметры подключения",
                //                   "Невозможно подключиться к серверу ");
                //        Console.WriteLine(ex.StackTrace);
                //        Application.Exit();
                //    }
                //    catch (Exception ex)
                //    {
                //        MessageBox.Show("Непредвиденное исключение",
                //                    "Невозможно подключиться к серверу ");
                //        Console.WriteLine(ex.StackTrace);
                //        Application.Exit();
                //    }
 
 
                  
                //}
          //  }
 
        }
Добавлено через 2 минуты
OttoFix, Это вообще ничего не решало, коль не знаешь, не пиши, я, вроде как, все расписал выше или, может, оспоришь?

Добавлено через 1 минуту
0
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,357
15.01.2019, 04:10
faxezad, не заводитесь. Я критикую не вас, а ваш код, ибо он отвратен в высшей степени. И не просто критикую, но пытаюсь дать совет как быть.

То, что показано выше - то ещё гэ.

Вынесите всю работу с базой в отдельный класс и с этим классом из кода окна и работайте. Такой класс будет переиспользуемым во всех окнах (и даже вне их - в консоли или веб-приложении).

Строку подключения берите из app.config (самый удобный вариант, но не единственный) с помощью класса ConfigurationManager. Это сделать очень просто. Заодно появится возможность менять строку подключения безе перекомпиляции приложения.

Подключение к базе открывайте только в момент обращения к базе. Держать его постоянно открытым не надо. Это плохой подход. Тоже самое, что заранее снять трубку с телефона, чтобы когда-нибудь начать набирать номер.

Вручную из reader'а вытаскивать данные очень муторно и неудобно. Воспользуйтесь какой-нибудь библиотечкой-мапером типа Dapper.NET, которая результат запроса спроецирует на класс. Кстати, оперировать классами, представляющими результат выборки из базы - самый правильный, чистый и наглядный способ.

Никогда не используйте в SQL-запросах звёздочку (SELECT *). Это очень дурной тон в разработке. Перечисляйте поля таблицы явно, даже если их много. Если полей много, то команду SELECT... можно сгенерировать в любой программе по администрированию СУБД. В любой.

Всегда используйте обработку исключений. Это не обязательно делать там, где исключение выбрасывается.
0
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
15.01.2019, 06:35
Цитата Сообщение от faxezad Посмотреть сообщение
Это вообще ничего не решало
Как это не решало? Аналогия, забивать микроскопом гвоздь и говорить, что ничего не решается от того чем забивать.
Да можно "стряпать" код, как угодно, по принципу лишь бы работало, но это не правильно!!!
Usaga объяснил подробней и из его объяснений вытекает "Переписать все заново".
Лучше бы не спорили, а начали бы с переделывать, попутно спрашивая, что не понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2019, 06:35
Помогаю со студенческими работами здесь

Подключение к FireBird
Здравствуйте, не могу подключится к базе данных firebird using FirebirdSql.Data.FirebirdClient; private void Form1_Load(object...

Подключение к БД Firebird
FbConnection fb = new FbConnection("Charset=win1251;DataSource=127.0.0.1;Port=3051;User=sysdba;Password=6654432;Database=C:\\1.fdb;"); ...

Подключение к базе данных FireBird
Добрый день, пытаюсь подключить Firebird в VisualStudio. Смотрел уже подобные темы на этом форуме, но они не дали ответа ...

Подключение к базе данных firebird
Подскажите, как можно подключиться к бд firebird на C# ds = new DataSet("session"); conStr = "server=localhost;...

MS VS2010 + Firebird база - подключение по сети
День добрый. Пересмотрел кучу тем\примеров - проблему так и не решил. Не удается подключиться к БД Firebird, расположенной на другом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru