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

Проблема подготовки Visual Studio 2019 с БД Firebird

17.05.2021, 21:00. Показов 6740. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Для дальнейшей разработки мне нужно работать в VS с Firebird.
Я проходил все шаги из инструкции http://habr.com/ru/post/278405/ из пункта "Подготовка Visual Studio 2015 для работы с Firebird"
В конце пункта в качестве проверки выполненных шагов в обозревателе серверов пробуется создать подключение. Однако в списке источников данных Firebird так и не появился.
Я сделал все точь-в-точь из инструкции. Уже не знаю, что делать
Может кто-то сталкивался с такой проблемой?
Миниатюры
Проблема подготовки Visual Studio 2019 с БД Firebird  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2021, 21:00
Ответы с готовыми решениями:

Проблема создания подключения БД Firebird в Entity FrameWork (Visual Studio 2019)
Добрый день! Подскажите куда копать, может есть у кого опыт такой настройки. В общем есть действующая база данных в старом формате...

Проблема в Visual Studio 2019
Добрый вечер. Установил Visual Studio 2019. Поставил следующие галочки: Разработка классических приложений .NET, Разработка классических...

Проблема с Visual Studio 2019
Здравствуйте. Хочу создать консольное приложение в VS 2019. Но возникает следующего рода проблема (во вложении). Что делать? Метод, который...

28
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
18.05.2021, 07:04
pirab, да не надо вам из VS к базам цепляться. Это очень старый подход, который уже давно неактуален.

Для работы с самой СУБД можете взять одну из 100500 доступных программ. Например DBeaver. Там можно и таблицы посмотреть и схему изменить и запросы пописать. И всё такое. VS тут вообще не нужна.

А для взаимодействия с Firebird из кода, вам достаточно ADO.NET голого плюс провайдер для Firebird (NuGet-пакет FirebirdSql.Data.FirebirdClient). Забудьте вы про эти древнючие мастера в VS.
1
18.05.2021, 09:53

Не по теме:

.. похоже, Microsoft уже стоит провести ребрендинг и убрать из названия IDE слово Visual ... Оно многих конфузит .. :)

0
18.05.2021, 13:48

Не по теме:

carrotik, на самом деле конфузят тонны примеров и статей пятнадцатилетней (и старше) давности, которые демонстрируют такие архаизмы и запутывают новичков...

0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
19.05.2021, 11:05  [ТС]
Usaga, я просто пишу приложение на c# и в качестве бд у меня Firebird, поэтому и знакомила vs и Firebird

Т.е. мне можно не устанавливать все доп расширения и для взаимодействия с Firebird из vs мне достаточно будет ADO.NET и пакета FirebirdSql.Data.FirebirdClient?
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
19.05.2021, 11:10
pirab, да.
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
20.05.2021, 13:46  [ТС]
Я все подключила, всем большое спасибо за помощь. НО возникла ещё проблема.
Я вывожу в DataGridView таблицы БД, которые содержат тип Varchar и Integer. Всё работает:
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
namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        private FbConnectionStringBuilder csb = null;
        private FbConnection db = null;
        public Form1()
        {
            InitializeComponent();
          
        }  
        private void Form1_Load(object sender, EventArgs e)
        {
            csb = new FbConnectionStringBuilder();
            csb.DataSource = "localhost";
            csb.Port = 3050;
            csb.Database = @"C:\735\SQL\aa.fdb";
            csb.UserID = "SYSDBA";
            csb.Password = "masterkey";
            csb.ServerType = FbServerType.Default;
 
            db = new FbConnection(csb.ToString());
            db.Open();
            FbCommand cmd = new FbCommand("select * from job", db);
            FbDataAdapter adapter = new FbDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            dataGridView1.DataSource = dt;
        }
    }
}
Но в одной таблице у меня есть столбец типа Boolean и возникает ошибка Invalid data type в строке
C#
1
adapter.Fill(dt);
Подскажите, пожалуйста, как можно в таком случае вывести таблицу?
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
20.05.2021, 13:54
pirab, попробуйте заменить тип колонки на char.
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
22.05.2021, 00:00  [ТС]
И ещё такой момент. У меня две формы. В главную я вывела таблицу из БД. Вторая форма для добавления/изменения записей.
Так вот, с добавлением я более менее разобралась, могу добавлять новые записи.
Но вот с изменением записей проблема: мне необходимо, чтобы данные из выделенной строки поступали на дочернюю форму и отображались в textBox
Подскажите, как можно это осуществить?
Миниатюры
Проблема подготовки Visual Studio 2019 с БД Firebird   Проблема подготовки Visual Studio 2019 с БД Firebird  
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
22.05.2021, 01:22
Используйте модели: В папке Modes проекта создайте новый класс.
C#
1
2
3
4
5
public class DSRecord {
    int Fuel_Id { get; set; }
    string Fuel_Name { get; set; }
    int Fuel_Price { get; set; }
}
Далее в главной форме:
C#
1
2
3
4
5
6
7
8
9
10
11
12
using MyApp.Models;
 
public partial class Form1 : Form 
{
    private void button1_Click(object sender, EventArgs e)
    {
          DataGridViewRow dgRow = dataGridView1.Rows[selectedRow.Value];
          DSRecord ds = new DSRecord({ Fuel_Id = dgRow[0], Fuel_Name = dgRow[1], Fuel_Price = dgRow[2]});
          Form2 frm = new Form2(ds);
          frm.ShowModal();
    }
}
В форме редактирования:
C#
1
2
3
4
5
6
7
8
9
10
11
using MyApp.Models;
public partial class Form2 : Form 
{
     public Form2(DSRecord record)
     {
          InitializeComponent();
          textBox1.Text = record.Fuel_Id.ToString();
          textBox2.Text = record.Fuel_Name;
          textBox3.Text = record.Fuel_Price.ToString();
     }
}
Добавлено через 7 минут
И еще: id не нужно редактировать и показывать ни в сетке, ни в форме редактирования/добавления.
Но при редактировании его следует передавать в модели для того, чтобы Form2 использовала его в предикате WHERE текста запроса UPDATE

Добавлено через 10 минут
Вместо
C#
1
DataGridViewRow dgRow = dataGridView1.Rows[selectedRow.Value];
Нужно
C#
1
DataGridViewRow dgRow = dataGridView1.SelectedRows[0];
Ну и конечно
C#
1
dataGridView1.MultySelect = false;
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
22.05.2021, 15:45  [ТС]
MsGuns, в выражении выдаёт ошибку "Не удается применить индексирование через [] к выражению типа "DataGridViewRow"".

C#
1
 DSRecord ds = new DSRecord({ Fuel_Id = dgRow[0], Fuel_Name = dgRow[1], Fuel_Price = dgRow[2]});
Я пробовала через свойство Cells обратиться к ячейкам, однако возникла новая ошибка: Не удается неявно преобразовать тип в "int". Использовала Convert.ToInt
В итоге вообще всё сломалось....
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
22.05.2021, 15:55
Покажите структуру таблицы job
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
22.05.2021, 21:29  [ТС]
MsGuns, всё, всё починила
добавила .Cells[0].Value и всё получилось
Спасибо за помощь!

Добавлено через 5 часов 31 минуту
Разбираюсь сейчас в удалении. В переменной Fly_Area_Id содержится айдишник, параметры передала, транзакцию начала. Но запись почему то всё равно не удаляется...
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
private void buttonDel_Click(object sender, EventArgs e)
        {
            DataGridViewRow dgRow = dataGridView1.SelectedRows[0]; //выделенная строка на удаление
            string Fly_Area_Id = Convert.ToString(dgRow.Cells[0].Value); //выбираю ячейку с Id
           
            DialogResult dr = MessageBox.Show("Удалить информацию о площадке " + Fly_Area_Id + "?",
                            "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            
            if (dr == System.Windows.Forms.DialogResult.Yes)
            {
                FbCommand DelSQL = new FbCommand("DELETE FROM FlyArea WHERE FlyAreaId = @Fly_Area_Id", db1);
                DelSQL.Parameters.Add("@Fly_Area_Id", FbDbType.SmallInt).Value = Fly_Area_Id;
                FbTransaction fbt = db1.BeginTransaction();
                DelSQL.Transaction = fbt;
                try
                {
                    MessageBox.Show("Информация успешно удалена");
                    fbt.Commit();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                DelSQL.Dispose();               
                dataGridView1.Refresh();
            }
        }
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
22.05.2021, 22:23
Цитата Сообщение от pirab Посмотреть сообщение
DelSQL.Parameters.Add("@Fly_Area_Id", FbDbType.SmallInt).Value = Fly_Area_Id;
Это что за чудо-юдо ?
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
22.05.2021, 22:31  [ТС]
MsGuns, я где-то на форуме прочла, что перед транзакцией переменные должны быть "запараметризированы", а то добавление/изменение не выполнится...
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
22.05.2021, 23:27
Я ведь не просто так спросил:
Цитата Сообщение от MsGuns Посмотреть сообщение
Покажите структуру таблицы job
У Вас что, id в таблице job стринговый (char/varchar/nchar/nvarchar) ?
А если он у вас определяется генератором, т.е. собственно является уникальным индентификатором, т.е. id, зачем все эти выкрутасы с преобразованием то в стринг, то в smallint ?

Поехали далее.
Зачем Вы его все время суете юзеру: то заставляете вводить, то предупреждаете о том, что запись с таким id будет удалена ?
Вы понимаете смысл айдишников ? Похоже, что нет совершенно.

Танцы с транзакцией.
Если Вы понятия розового не имеете, что это такое и с чем их едят, зачем бездумно суете чей-то код в свое приложение ?
Малый ликбез по тразакциям.
1. Не имеет смысла создавать транзакцию для единственного оператора SQL - он и так сервером будет выполнен в транзакции, ведь SQL-серверы абсолютно все выполняют в контексте транзакций !
2. Если уж Вы открываете транзакцию явно, то и завершайте ее тоже явно. У вас есть commit, но нет rollback, - а это уже непорядок.
3. Делать rollback аварийно завершившейся транзакции все равно, что заставить похрюкать только что зарезанную свинью.

Короче, Вам срочно нужно почитать что-нибудь об ADO.NET. Не про Firebird, а именно про ADO.NET.
Попробуйте тут: https://metanit.com/sharp/adonet/

Добавлено через 59 секунд
И покажите код обработки изменений и добавлений.

Добавлено через 5 минут
Цитата Сообщение от pirab Посмотреть сообщение
я где-то на форуме прочла, что
Вот это просто убивает
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
23.05.2021, 00:42  [ТС]
MsGuns, структура таблицы на рисунке прикрепила (таблица называется flyarea). столбцы: номер площадки(smallint) и размер площадки(varchar).
это таблица про площадки, у площадок нет названий, поэтому я оставила их номера, они же первичные ключи

код кнопок добавления/изменения главной формы:
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
private void buttonAdd_Click(object sender, EventArgs e)
        {
            ClassDRecord ds = new ClassDRecord { };
            FormFlyAreaAddEdit ffaae = new FormFlyAreaAddEdit(db1, ds);
            ffaae.ShowDialog();
            if (ffaae.DialogResult == System.Windows.Forms.DialogResult.OK)
            {
                dataToTable();//метод для перезагрузки таблицы
                dataGridView1.Refresh();
            }
        }
        //Изменение
        private void buttonEdit_Click(object sender, EventArgs e)
        {
            DataGridViewRow dgRow = dataGridView1.SelectedRows[0];
            ClassDRecord ds = new ClassDRecord{ FlyAreaId = Convert.ToInt32(dgRow.Cells[0].Value), SizeArea = Convert.ToString(dgRow.Cells[1].Value)};
            FormFlyAreaAddEdit ffaae = new FormFlyAreaAddEdit(db1, ds);
            ffaae.ShowDialog();
            if (ffaae.DialogResult == System.Windows.Forms.DialogResult.OK)
            {
                dataToTable();//метод для перезагрузки таблицы
                dataGridView1.Refresh();
            }
        }

код обработки добавлений/изменений на дочерней форме
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                string AId = textBoxAreaID.Text;
                string SizeArea = textBoxSizeArea.Text;
 
                FbCommand InsertSQL = new FbCommand("UPDATE OR INSERT INTO FlyArea(FlyAreaId, SizeArea) VALUES(@AId,@SizeArea)", db2);
                InsertSQL.Parameters.Add("@AId", FbDbType.SmallInt).Value = AId;
                InsertSQL.Parameters.Add("@SizeArea", FbDbType.VarChar).Value = SizeArea;
                FbTransaction fbt = db2.BeginTransaction(); //старт транзакции;
                InsertSQL.Transaction = fbt; //проинициализировать транзакцию для объекта InsertSQL
                try
                {
                    int res = InsertSQL.ExecuteNonQuery(); //для запросов, не возвращающих набор данных 
                    MessageBox.Show("SUCCESS: " + res.ToString());
                    fbt.Commit();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                InsertSQL.Dispose();
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
Изображения
 
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 151
23.05.2021, 00:42  [ТС]
То есть вместо транзакций использовать FbDataAdapter?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
23.05.2021, 01:50
Цитата Сообщение от pirab Посмотреть сообщение
То есть вместо транзакций использовать FbDataAdapter?
Застрелиццо

Пока Вы хоть что-нибудь не почитаете про ADO, все это бесполезно..
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
23.05.2021, 13:40
Цитата Сообщение от pirab Посмотреть сообщение
у площадок нет названий, поэтому я оставила их номера, они же первичные ключи
Пропустил это шедевр
Вам нужно еще хоть что-то узнать про основы проектирования СУБД.

Извините, но по всему, что Вы натворили, Вы сильно напоминаете обезьяну с гранатой и пулеметом Дегтярева наперевес
Надеюсь, без обид
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2021, 13:40
Помогаю со студенческими работами здесь

Проблема с Visual Studio Community 2019
Нужно установить дополнительные компоненты для VS, запускаю VS Installer и там нету кнопок удалить, изменить, восстановить хотя они должны...

Проблема с бибилеотеками в Visual Studio 2019
Здравствуйте! У меня возникла проблема с подключением библиотек в С++ а именно 'не удается открыть источник файл "iostream" '....

проблема с ветками в Visual Studio 2019 Git
Не так давно мы с svn перешли на Git , вроде все было нормально , освоились но после последнего обновления Visual Studio 2019, возникла...

Проблема с обновлением и установкой Visual Studio 2019(16.2.1)
После обновления появилась "Не удалось установить пакет Microsoft.VisualStudio.MinShell.Interop.Msi". Пробовал полную переустановку...

Проблема с подключением заголовочный файлов Visual Studio 2019 16
F:\glfw-3.3.2.bin.WIN64\include - По этому пути лежит одна папка GLFW, а в ней glfw3.h, как только я не добавлял заг. файл. в VS она не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru