Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
1

DataSet и Firebird

23.12.2019, 13:45. Показов 2033. Ответов 23

Author24 — интернет-сервис помощи студентам
Добрый день!

У меня вопрос с программным добавлением DBF в базу firebird. Обязательное условие - это должна быть программа на С#.

Вообщем, я загружаю таблицу dbf в DataSet.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openfiledialogDBF.FileName.Substring(0, openfiledialogDBF.FileName.LastIndexOf("\\")) + ";Extended Properties=dBASE IV;";
 
                OleDbConnection conn = new OleDbConnection(connStr);
                conn.Open();
 
                string cmd_string = "select * from " + openfiledialogDBF.SafeFileName.Substring(0, openfiledialogDBF.SafeFileName.IndexOf("."));
             
                OleDbDataAdapter da = new OleDbDataAdapter(cmd_string, conn);
                DataSet ds = new DataSet();
                da.Fill(ds);


После я хочу из DataSet выгрузить эту таблицу в firebird. Есть ли легкий способ это сделать?

Я начал писать код на костылях и палках, типа:
Кликните здесь для просмотра всего текста
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
string conn1 = @"data source = localhost; port = 3050; initial catalog = D:\DB_TEST.FDB; user id = SYSDBA; password = *****; Dialect = 3";
// Это как я вызываю свой метод...
Firebird_CREATE_TABLE(ds, ofdDBF.SafeFileName.Substring(0, ofdDBF.SafeFileName.IndexOf(".")), conn1);
 
// Ну а это сам метод создания таблицы
void Firebird_CREATE_TABLE(DataSet ds, string table, string conn) // Принимаем dataset, Имя будущей таблицы и подключение
        {
            try
            {
                List<string> str1 = new List<string>();
 
                for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                {
                    string rty = null;
                    switch (ds.Tables[0].Columns[i].DataType.ToString())
                    {
                        case "System.String": rty = "VARCHAR (150)"; break;
                        case "System.Double": rty = "DOUBLE PRECISION"; break;
                        case "System.DateTime": rty = "DATE"; break;
                        default: rty = ds.Tables[0].Columns[i].DataType.Name; break;
                    }
 
                    str1.Add(ds.Tables[0].Columns[i].ColumnName + " " + rty);
                }
 
                string ss1 = null;
                for (int i = 0; i < str1.Count - 1; i++)
                {
                    ss1 += str1[i] + ",";
                }
                ss1 += str1[str1.Count - 1];
 
                FbCommand cmd = new FbCommand("create table " + table + " (" + ss1 + ");");
                cmd.CommandType = CommandType.Text;
                using (cmd.Connection = new FbConnection(conn))
                {
                    cmd.Connection.Open();
                    cmd.ExecuteNonQuery();
                    cmd.Connection.Close();
                }
            }
            catch (Exception ex)
            {
                Message_ERROR(ex);
            }
        }


Потом ещё извращения с insert into...
Но это как-то неправильно... Меня прям что-то останавливает... Кто-нибудь с таким сталкивался? Как можно реализовать перемещение таблицы из DataSet в firebird?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2019, 13:45
Ответы с готовыми решениями:

Передача данных из таблицы одной dataSet в таблицу другой dataSet
Здравствуйте. У меня возникла ситуация когда необходимо передать данные из таблицы одной dataset в...

Отбор записей из одного DataSet в другой DataSet
Совсем недавно работаю под VS2008 C#. Имеется подключение к базе mdb. Примерная структура таблицы...

FireBird + Interbase&Firebird Development Studio
Установил FireBird 2.5 SuperClassic и Interbase&amp;Firebird Development Studio. Зашел в студию,...

Заполнение DataSet данными из другого DataSet
Здравствуйте. Есть DataSet (назовем его ds1) с 2 связанными таблицами( Table1 и Table2, связаны по...

23
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
24.12.2019, 14:48  [ТС] 21
Author24 — интернет-сервис помощи студентам
Я как понял, DataAdapter подойдет, если база данных подключена через ODBC? Просто я не понимаю, как после добавления строк мне отправить данные через adapter.Update();
0
1150 / 858 / 263
Регистрация: 30.04.2009
Сообщений: 3,598
24.12.2019, 16:04 22
ndrnesterov, ODBC не ODBC не важно. В Firebird ADO.NET клиенте есть FbDataAdapter, вот его и используйте. Вы были на правильном пути
В метод Update надо передать DataTable, в вашем случае ничего даже не надо трансформировать - просто передать таблицу из датасета, который вы загрузили - ds.Tables[0].
Все что вам надо это правильно сконфигурировать dataAdapter.InsertCommand.
Надо создать команду с параметрами, как показано в примере из статьи.
Это проще чем кажется, когда поймете механику работы
0
Usaga
24.12.2019, 17:44
  #23

Не по теме:

nicolas2008, вы на код посмотрите. Если заработало без DataAdapter, то бог с ним. А вообще, перенос схемы, с ключами и индексами, предполагает программу посложнее. И Adapter'ы тут не главное)

0
1150 / 858 / 263
Регистрация: 30.04.2009
Сообщений: 3,598
24.12.2019, 18:41 24
Usaga, так и хочется как раз помочь человеку упростить код, не рокет саенс же этот датаадаптер
1
24.12.2019, 18:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2019, 18:41
Помогаю со студенческими работами здесь

Разбиение строки в FireBird - Firebird/InterBase
Продолжая тему отсюда: https://www.cyberforum.ru/firebird/thread309236.html :wall: Есть поле типа...

Как разделить Dataset на 3 Dataset?
Есть Dataset ds; В нём первая таблица содержит 30 строк. Надо раскидать строки из его первой...

Копирование данных из DataSet в DataSet
Люди, подскажите, как мне скопировать данные из одного DataSet(Access) в другой(Наборы данных...

Fast Report: "Cannot use the same dataset for Report.DataSet and Band.DataSet"
Здравствуйте! Подскажите, пожалуйста, в чём ошибка. Я добавила на форму два компонента: frxReport1...

Как или чем конвертировать таблицы из Firebird в MySQL или наоборот из MySQL в Firebird ?!
Предлагайте все возможные варианты! Заранее при много благодарен!

Конвертирование Firebird 2.0 на Firebird 2.5
Приветствую всех!!! Мне дали задачу на работе поменять версию Firebird 2.0 на Firebird 2.5. Ну...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru