OleDbCommand.CommandText

Форум посвящён работе с базами данных в .NET.

Модератор: Ramzes

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

OleDbCommand.CommandText

Сообщение Thomas » 23.09.2006 (Сб) 14:42

Приветствую всех.

Проблема в следующем. Ни как не соображу :oops: как вывести данные из двух таблиц одной БД в листБох на форме?
Вывод данных из одной без проблем.
Код: Выделить всё
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        # region declaration
        private OleDbConnection con = new OleDbConnection();
        private OleDbCommand cmd = new OleDbCommand();
        private OleDbDataAdapter da = new OleDbDataAdapter();
        private DataSet ds = new DataSet();
        #endregion

        private void btnShow_Click(object sender, EventArgs e)
        {
            int lyn = 0;
            string tekst = "";
            con.ConnectionString = "provider=Microsoft.Jet.oledb.4.0;" +
                                   @"data source=D:\vti\Margo\nwind.mdb;";

            //   ----? ? ? ---- ! ! ! ---- ? ? ? ----
            // здесь пока могу только выбрать одну или вторую таблицу

            cmd.CommandText = "select * from categories";
            //cmd.CommandText = "select * from employees";


            cmd.Connection = con;
            da = new OleDbDataAdapter(cmd);
            try
            {
                da.Fill(ds, "kat"); // "кат" имя таблицы, не в БД, а здесь в ДС.
                foreach (DataTable tb in ds.Tables) // для всех таблиц в DataSet
                     foreach (DataRow ry in tb.Rows) //для всех строк в таблице
                    {
                        tekst = "";
                        for (int i = 0; i < tb.Columns.Count; i++)
                        {
                            tekst += ry[i].ToString() + " --- ";
                        }
                        // отображаем данные из таблицы в listBox
                        listBox1.Items.Add(tekst);
                    }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fout : " + ex.Message);
            }
            finally
            {
                con.Close();
            }
        }
    }


Как мне правильно прописать команды что бы вывести данные в листБокс из одной таблицы а ниже из другой.
Препод на уроке сказал что это возможно и показал результат, а вот как это синтаксически прописать не показал. Вот и ищу.
Я так понимаю что вполне достаточно иметь одно соединение с БД, один DataSet. А вот на счет DataAdapter и ОleDbCommand сомневаюсь.
Хотя по идее DataAdapter вполне может работать с многими таблица ми из БД.

Конечно это учебный пример. Но важно узнать сам принцип.

ЗЫ и код на C# но это в принципе не принципиально, на VB практически тоже самое.

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 27.09.2006 (Ср) 8:59

Всем привет!
К изложенному выше
сначала сделал так
Код: Выделить всё
# region declaration
        private OleDbConnection con = new OleDbConnection();
        private OleDbCommand cmd1 = new OleDbCommand(); //задекларировал две отдельные команды
        private OleDbCommand cmd2 = new OleDbCommand();
        private OleDbDataAdapter da1 = new OleDbDataAdapter(); // также задекларировал два DataAdapter
        private OleDbDataAdapter da2 = new OleDbDataAdapter();
        private DataSet ds = new DataSet();
        #endregion

        private void btnShow_Click(object sender, EventArgs e)
        {
            int lyn = 0;
            string tekst = "";
            con.ConnectionString = "provider=Microsoft.Jet.oledb.4.0;" +
                                   @"data source=D:\vti\Margo\nwind.mdb;";
            cmd1.CommandText = "select * from categories"; // здесь запрос на выборку из одной таблицы
            cmd2.CommandText = "select * from employees"; //в этой команде запрос на выборку из другой таблицы
            cmd1.Connection = con;
            cmd2.Connection = con;
            da1 = new OleDbDataAdapter(cmd1); //и два разных da обрабатывают эти запросы
            da2 = new OleDbDataAdapter(cmd2);
            try
            {
                da1.Fill(ds, "kategori");
                da2.Fill(ds, "bedienden");


А как оказалось, решение гораздо проще.
Декларацию оставляем как и в первом случае, т.е. декларируем по одной команде и одному датаадаптеру.
А код события пишем так
Код: Выделить всё
private void btnShow_Click(object sender, EventArgs e)
        {
            int lyn = 0;
            string tekst = "";
            con.ConnectionString = "provider=Microsoft.Jet.oledb.4.0;" +
                                   @"data source=D:\vti\Margo\nwind.mdb;";
            cmd.Connection = con; //соединение
            da = new OleDbDataAdapter(cmd); //создали датаАдаптер
            cmd.CommandText = "select * from categories"; // первая команда на выборку из одной таблицы
            da.Fill(ds, "kategori"); // обработали первую команду
            cmd.CommandText = "select * from employees"; // вторая команда на выборку, но уже из другой таблицы
            da.Fill(ds, "bedienden"); // обработали вторую команду
            try
            {
                foreach (DataTable tb in ds.Tables) // для всех таблиц из ДатаСет
                    foreach (DataRow ry in tb.Rows) // для всех строк в таблице
                    {
                        tekst = "";
                        for (int i = 0; i < tb.Columns.Count; i++)
                        {
                            tekst += ry[i].ToString() + " --- ";
                        }
                        //показываем данные в ListBox
                        listBox1.Items.Add(tekst);
                        //показываем данные в ListView
                        listView1.Items.Add(ry[0].ToString());
                        listView1.Items[lyn].SubItems.Add(ry[1].ToString());
                        listView1.Items[lyn].SubItems.Add(ry[2].ToString());
                        listView1.Items[lyn++].SubItems.Add(ry[3].ToString());
                    }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fout : " + ex.Message);
            }
            finally
            {
                con.Close();
            }
        }


В принципе об этом я и спрашивал в первом посте.
Получается, что можно использовать одну и туже команду cmd и один и тотже da, только последовательно для разных select команд.

Всем спасибо. И наилучшие пожелания. :D

ЗЫ может кому и пригодиться.


Вернуться в ADO.NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList