Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Как подключить FB (FireBird) в C#


Автор: Akella 19.10.2005, 11:30
Я скачал сборки для подключения FB к C#, подключил, но как вывести данные в dataGrid smile
smile

Автор: Дрон 19.10.2005, 14:07
Так же как и для любой другой базы smile

Что не работает-то?

Автор: Akella 19.10.2005, 14:11
Спасибо за очень полный ответ smile
Добавлено @ 14:11
Сообщения зарабатываешь?

Автор: Дрон 19.10.2005, 14:12
Цитата(dsergey @ 19.10.2005, 15:11)
Сообщения зарабатываешь?

Да у меня их и так хватает smile

Но что тебе конкретно непонятно, ты так и не объяснил.
Добавлено @ 14:17
Начну с того, что способов вывести данных в dataGrid существует несколько.

Можно пользоваться встроенным в студию мастером (Wizard), можно программно.
Я предпочитаю программно -- так как это даёт гораздо больший контроль над тем, что мы получим.

Общая схема такая:

- создаём и открываем соединение
- создаём команду для выборки данных
- создаём DataAdapter и передаём ему эту команду
- создаём пустой DataSet и заполняем его командой Fill из адаптера
- присваиваем этот датасет свойству DataSource датагрида.

Наслаждаемся жизнью.

А теперь объясни, что же у тебя не получается?
Добавлено @ 14:18
Для разных баз более или менее существенные различия только на первом этапе -- создании соединения.

Автор: Akella 19.10.2005, 17:16
Программно я смог, но вот как в дизайнере?
Дополнительный вопрос: как сделать DataTable table глобальным?

подскажи пример кода

Автор: mr.DUDA 20.10.2005, 22:11
Цитата(dsergey @ 19.10.2005, 17:16)
Программно я смог, но вот как в дизайнере?
Дополнительный вопрос: как сделать DataTable table глобальным?

подскажи пример кода

В дизайнере - по аналогии с кодом C# smile... Если шаришь в шарпе, то не проблема будет экстраполировать свои знания на design-time.

DataTable сделать "глобальным" можно, объявив переменную такого типа в рамках одного класса (любого). Глобальность будет проявляться в том, что эта переменная (DataTable myTbl) будет видна из всех методов данного класса. Если же необходимо сделать доступной её из ЛЮБОЙ точки программы, то нужно сделать эту переменную глобальной статической в любом классе.
Добавлено @ 22:12
Цитата(dsergey @ 19.10.2005, 14:11)
Сообщения зарабатываешь?

Сначала посмотри на его репутацию, потом задавай такой неуместный вопрос smile

Автор: Akella 21.10.2005, 09:04
Спасибо, пацаны, за ответы, но... я C# только начинаю изучать, поэтому было бы неплохо, если бы вы подкрепили свои сообщения примерами или, хотябы, про дизайн немного более подробно описали smile
Заранее спасибо.

Цитата(mr @ 20.10.2005, 22:11)
DataTable сделать "глобальным" можно, объявив переменную такого типа в рамках одного класса (любого). Глобальность будет проявляться в том, что эта переменная (DataTable myTbl) будет видна из всех методов данного класса. Если же необходимо сделать доступной её из ЛЮБОЙ точки программы, то нужно сделать эту переменную глобальной статической в любом классе

а это я так знаю, но как это реализовать в коде? smile

Автор: STEEL98 30.5.2006, 12:11
А у меня что то не получается, вы каким нибудь провайдером пользуетесь для работы с фб?
Вот код, что не так?
Код

            DataSet ds = new DataSet();
            FbConnectionStringBuilder csb = new FbConnectionStringBuilder();
            csb.UserID = "SYSDBA";
            csb.Password = "masterkey";
            csb.Database = "localhost:dummy"; 
            //csb.ServerType = 1;
       
            FbDataAdapter da = new FbDataAdapter("SELECT * FROM t1", csb.ToString());
       //     da.SelectCommand.Parameters.Add("@id", 1);
            da.Fill(ds);
            dataGridView1.DataSource = ds;


В итоге нет ничего в датагриде? Кстати во многих книгах его называют датагрид, а в VS 2005  .NET  он зовется именно DataGridView верно? 

Автор: Akella 13.10.2006, 10:38
Цитата(STEEL98 @  30.5.2006,  12:11 Найти цитируемый пост)
А у меня что то не получается, вы каким нибудь провайдером пользуетесь для работы с фб?

http://www.firebirdsql.org/index.php?op=files&id=netprovider


поднимаю тему  smile

поставил 
.NET 2.0
Visual Studio 2005
Version 2.0.1 RC2 for .NET 2.0
DDEX Provider for Visual Studio 2005

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

есть книга Тролсена, но она не для новичков, ничего там не понятно. smile 

Автор: mr.DUDA 13.10.2006, 10:51
Akella, вопрос к чему относится - к SQL, к работе с БД в дотнет, или есть проблемы с firebird ?

Автор: Akella 13.10.2006, 11:07
c FB нет проблем. Хочу базу подключить к гриду (для начала в дизайнере)

Добавлено @ 11:08 
может есть немного доки, у меня есть дока  FirebirdNETProviderSDK.chm (1.7), не знаю, сгодиться ли..

Автор: Akella 13.10.2006, 11:31
ниче страшного если я не буду создавать новую тему и задам маленький вопрос:
что это за "DDEX Provider for Visual Studio 2005"

если что, mr.DUDA, скажи я создам новую тему, без проблем  smile 

Автор: mr.DUDA 13.10.2006, 13:29
Akella, вопрос "просто" по ADO.NET smile

З.Ы. DDEX может значить всё что угодно, AFAIK

Автор: Akella 13.10.2006, 15:44
теме почти год, неужели никто не подключал базу FB в дазайнере  smile 

Автор: Akella 13.10.2006, 16:14
подключил не в дизайнере
Код

            string mySelectQuery = "select a.id, r.name from apart a left join regions r on (r.id = a.id_regions)";
            myConnection.Open();
            FbDataAdapter da = new FbDataAdapter(mySelectQuery, myConnection);
            FbCommand comm = new FbCommand(mySelectQuery);
            DataSet ds = new DataSet("regions");
            da.Fill(ds, "regions");
            DataTable dt = ds.Tables["regions"];
            dataGridView1.DataSource = dt;

вопрос на засыпку: а если выборка не из одной таблицы, а так

Код

string mySelectQuery = "select a.id, r.name from apart a left join regions r on (r.id = a.id_regions)";

Автор: mr.DUDA 13.10.2006, 18:07
Цитата(Akella @  13.10.2006,  16:14 Найти цитируемый пост)
вопрос на засыпку: а если выборка не из одной таблицы, а так

Всё равно результатом будет одна плоская таблица.

Автор: Akella 16.10.2006, 08:08
smile  я понимаю, что будет одна плоская таблица, как её вывести? подскажите.

mr.DUDA,  smile  ты всё время ходишь вокруг да около...  smile 
хотелось бы если уж получать ответы, то более менее понятные, а лучше полные

Добавлено @ 08:10 
mr.DUDA, я имел ввиду, как бы выглялдел этот код?

Код

DataSet ds = new DataSet("regions"); <- не могу же я указать здесь regions
da.Fill(ds, "regions");<- не могу же я указать здесь regions
DataTable dt = ds.Tables["regions"];<- не могу же я указать здесь regions
dataGridView1.DataSource = dt;

Автор: mr.DUDA 16.10.2006, 10:35
Akella, смотри:

- делаешь SQL-запрос к двум таблицам, так ?
- таблицы в БД связаны по ключевому полю, одна является подчинённой для другой; в твоём примере таблица apart подчинена таблице regions (в терминах ADO таблица regions является parent-ом для таблицы apart);
- запрос сформирован так, что его результатом будет таблица с записями из apart, плюс поля из таблицы regions; это можно увидеть, выполнив запрос в консоли Firebird или в любой IDE-подобной утилите для работы с этой БД;
- после обработки данного запроса датаадаптером (метод Fill, заполняющий датасет), получится так что в изначально пустой датасет добавится DataTable с именем aparts, содержащая все поля из результата, т.е. поля из таблицы БД aparts и таблицы БД regions; проверить это можно, взяв у датасета свойство Tables.Count (будет равно 1) и Tables[0] (будет содержать результат), можно сделать это в окне отладчика, введя соотв. выражения для проверки на закладке Watch.

Если что-то всё ещё неясно, давай будем разбираться на примерах кода.

Добавлено @ 10:39 
Цитата(Akella @  16.10.2006,  08:08 Найти цитируемый пост)
DataSet ds = new DataSet("regions"); <- не могу же я указать здесь regions
da.Fill(ds, "regions");<- не могу же я указать здесь regions
DataTable dt = ds.Tables["regions"];<- не могу же я указать здесь regions
dataGridView1.DataSource = dt;

Тут опять-таки, надо просто разобраться что нам нужно видеть в датагриде. Нужна таблица regions и только regions ? Делай SQL-запрос, возвращающий только данные из regions. Нужно показать записи из aparts и связанные с ними записи из regions, в виде дерева или двух отдельных датагридов ? Делай два SQL-запроса в один датасет с программно добавленными в него DataTable и DataRelation, и пусть первый запрос заполнит parent-таблицу, второй - child-таблицу.

Автор: Akella 17.10.2006, 08:14
Цитата(mr.DUDA @  16.10.2006,  10:35 Найти цитируемый пост)
- таблицы в БД связаны по ключевому полю, одна является подчинённой для другой; в твоём примере таблица apart подчинена таблице regions

нет, regions - это таблица справочник.

Добавлено @ 08:17 
короче вот дали мне пример - коротко и ясно:
Код

DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];
dataGridView1.DataSource = dt;

Автор: mr.DUDA 17.10.2006, 10:31
Цитата(Akella @  17.10.2006,  08:14 Найти цитируемый пост)
нет, regions - это таблица справочник.

это то же самое, о чём я говорю

Цитата(Akella @  17.10.2006,  08:14 Найти цитируемый пост)
короче вот дали мне пример - коротко и ясно:

раз так понятно, то отлично smile

Автор: Akella 17.10.2006, 13:37
Цитата(Akella @ 13.10.2006,  11:31)
ниче страшного если я не буду создавать новую тему и задам маленький вопрос:
что это за "DDEX Provider for Visual Studio 2005"

если что, mr.DUDA, скажи я создам новую тему, без проблем  smile

http://www.firebirdtutorial.net/firebird-data-access-designer-ddex-installation.html

Автор: Akella 17.10.2006, 14:36
http://www.firebirdtutorial.net/sqldatasource-component.html
кидаем на форму datasource и больше ничего. С пом. констрокутора облепливаем datasource всем остальным.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)