Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataSet + Select, возможен ли запрос на выборку из таблицы 
V
    Опции темы
thomas
Дата 5.11.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Привет всем.

Программно(C#)  работаем  с БД Access. А так как возможность частых подключений к базе ограничена, то загружаем часть таблиц из БД в DataSet и там должны выполняться выборки.
Вопрос: возможно ли выполнять SQL запросы на выборку из таблиц находящихся в DataSet?
Если да, то как это выглядит синтаксически.
К примеру чтобы загрузить таблицу в DataSet пишу следующее:
Код

#region declaration
        private string sql;
        private OleDbCommand cmd;
        private OleDbConnection con;
        private OleDbDataAdapter da;
        private DataSet ds;
        private DataView dv;
        # endregion
 private void frmMyForm_Load(object sender, EventArgs e)
        {
            con = new OleDbConnection();
            con.ConnectionString = @"provider=Microsoft.Jet.oledb.4.0;" +
                                   @"data source=D:\vti\Margo\Cyberpro.mdb";
            sql = "select * from tblKlanten order by [Naam klant]";
            da = new OleDbDataAdapter(sql, con);
            ds = new DataSet();
            da.Fill(ds, "klanten"); //загрузили таблицу с клиентами
            
            sql = "select * from [tblArtikels_(verkoop)] order by [Naam artikel]";
            da = new OleDbDataAdapter(sql, con);
            da.Fill(ds, "artikelen"); //загрузили таблицу с товаром.

            sql = "select * from tblVerkoop;
            da = new OleDbDataAdapter(sql, con);
            da.Fill(ds, "verkoop"); // загрузили таблицу с продажами
            
            con.Close();
        }


Ну а теперь в DataSet(без соединения с БД)  из этих трех таблиц нужно делать выборки. К примеру для определенного клиента сделать таблицу всех его покупок. И далее, к примеру,  из этой таблицы сделать выборку по определенному товару.

Если бы было возможно соединение с базой, то выборку покупок данного клиента получил бы так
Код

            cmd = new OleDbCommand();
            cmd.Connection = con;
            con.Open();
            cmd.CommandText = "select * from tblVerkopen where [Code klant] =" + 
                              "'" + cmbKlantOef1.SelectedItem.ToString() + "'" ; // код клиента из ComboBox
            
            da = new OleDbDataAdapter(cmd);
            da.Fill(ds, "verkopen");
           
                //отображаем полученные данные в DataGridView
            dv = new DataView();
            dv.Table = ds.Tables["verkopen"];
            dgvVerkoop.DataSource = dv;


А как это сделать в DataSet?  
SQL запрос будет  "select * from verkoop where [Code klant] = xxxx"   где "verkoop" имя таблицы в DataSet. 

Заранее спасибо.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
reloni
Дата 5.11.2006, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.5.2006
Где: Москва

Репутация: нет
Всего: 4



У DataTable есть специальный метод Select. Должно быть примерно так:
Код

DataRow[] rows = ds.Tables["verkopen"].Select("[Code klant] = xxxx");



Это сообщение отредактировал(а) reloni - 5.11.2006, 21:43
PM MAIL ICQ   Вверх
thomas
Дата 5.11.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



reloni, 
хорошо, таким методом я получу массив строк из таблицы "verkopen", которые удовлетворяют условию.

А что мне делать с этим массивом? Как мне его, к примеру, в отдельную таблицу запихнуть?
Для последующих манипуляций.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
reloni
Дата 5.11.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.5.2006
Где: Москва

Репутация: нет
Всего: 4



В отдельную таблицу скорее всего не сможешь, т. к. эти строки уже принадлежат другой таблице, из которой ты делал выборку.
PM MAIL ICQ   Вверх
thomas
Дата 5.11.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



reloni, 
ладно, не могу создать отдельную таблицу их этого массива строк.
А еще раз отфильтровать этот массив, используя другой фильтр( по другому столбцу), возможно или нет?

Это сообщение отредактировал(а) thomas - 5.11.2006, 22:39


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
mr.DUDA
Дата 5.11.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(reloni @  5.11.2006,  21:23 Найти цитируемый пост)
В отдельную таблицу скорее всего не сможешь, т. к. эти строки уже принадлежат другой таблице, из которой ты делал выборку.

Можно выполнить Merge любой таблицы любого датасета с любым массивом DataRow-ов.


--------------------
user posted image
PM MAIL WWW   Вверх
thomas
Дата 8.11.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Привет всем.

Отвечаю на свой вопрос.

После вдумчивого и разнорстороннего изучения вопроса, я пришёл к выводу, что:
- SQL запросы можно использовать только при обращении к БД;
- для выборки данных в ДатаСет необходимо использовать фильтры для строк DataTable или фильтры в DataView.

DataRow[] drFound;
drFound=myDataTable.Select(условие);
так мы получаем массив строк удовлетворяющих условию выборки. Одну строку получить не возможно, только массив. Но массив может содержать одну строку.

dv = new DataView();
dv.Table = ds.Tables["имя таблицы в датасет"];
dv.RowFilter = "условие";
выводим на экран
DataGridView1.DataSource = dv;

Всем спасибо и успехов.

Это сообщение отредактировал(а) thomas - 9.11.2006, 01:10


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.