Интересная вчера попалась задача. Есть стандартная база данных для MS Access. «Борей» называется. Что это может значить мне так и не понятно. Нужно написать программу которая загружает список таблиц в combobox, а потом по выбору из него таблицы загружает содержимое в DataGridView. Язык реализации C#.
Голову поломал, ушло 7 часов, но сделал. Я буду рад, если кому пригодится.
Интерфейс получился такой:
По первой кнопке загружаем список таблиц из базы в combobox, вторая загружает данные из выбранной в DataGridView.
Для работы с базой мне потребовалась следующая сборка:
using System.Data.OleDb;
А далее код, который привязан к первой кнопке:
comboBox1.Items.Clear();
OleDbConnection dbCon = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Борей.mdb");
dbCon.Open();
DataTable tbls=dbCon.GetSchema("Tables",new string[] { null, null, null, "TABLE" }); //список всех таблиц
foreach (DataRow row in tbls.Rows)
{
string TableName = row["TABLE_NAME"].ToString();
comboBox1.Items.Add(TableName);
}
dbCon.Close();
Код для получения таблиц взят на форуме, а потом изменен.
Первое, что делается — очистка списка в ComboBox, что бы не загрузить список таблиц поверх. Далее, создается соединение с базой данных используя OleDB. Получаем схему и проходя по ней получаем список таблиц. Последней строкой закрываем соединение.
Вторая кнопка:
OleDbConnection dbCon = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Борей.mdb");
dbCon.Open();
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter(@"SELECT " + comboBox1.SelectedItem + @".* FROM " + comboBox1.SelectedItem, dbCon);
DataTable dataTable = new DataTable();
dbAdapter1.Fill(dataTable);
dataGridView1.DataSource = dataTable;
dbCon.Close();
Здесь, тоже самое. Создаем подключение открываем соединение, Создаем новый адаптер с запросом к нашей базе такого вида:
SELECT .* FROM
и выполняем этот запрос. Создаем новую таблицу данных. Заполняем ее данными полученными от запроса. Связываем Таблицу с DataGridView и закрываем соединение. Данные загружены:
Добавлено:
Немного модифицировал код, но суть осталась та же. Весь проект теперь доступен тут: AccessDB
О тестовой базе данных написано тут
Спасибо за толковое разъяснение!
Называется «Борей», потому что неправильно перевели «Northwind.mdb».
А за толковое объяснение спасибо, как раз для новичков.
Спасибо, большущее! Можно использовать как учебное пособие. Попробовал сам и все с первого раза все заработало. Побольше бы таких источников!
Спасибо большое!!! Очень понятно всё написано!!! Просто слов нет, чтобы выразить благодарность Вам! Очень большое спасибо!
Перерыл много сайтов и везде всё было замудрено, тут же всё просто и понятно.
Спасибо за добрые слова!
PS: Если слов не хватает, но хочется сделать приятно, есть Яндекс.Деньги: 41001241821675 :)
Добрый автор, не подскажешь как получить имена всех столбцов из таблицы?
Написал для вас: http://pyatnitsev.ru/2012/11/17/access-cs-getfield-names/
Подскажите а как можно один элемент таблицы вывести допустим как с элемента dataGridView
только вместо dataGridView использовать допустим dataTable или как-нибудь еще
так как в dataGridView можно отображать не все столбцы на а в коде допустим нужно будет использовать не отображённый столбец.
Не совсем понимаю вопрос.
Вам нужно использовать другой контролл для отображения на форме?
Или нужно как-то обращаться из кода? пишите на почту, постараюсь помочь: [email protected]
Добрый день! Подскажите пожалуйста, как согласно кода выше получить значения выбранного поля? К примеру:
Имя поля базы данных «Название» из него получить все данные не прибегая к DGV?
Подскажите вот, что у меня есть две таблицы Regions и таблица MembersInfo, задача вот в чем при добавления нового клиента нужно указать регион , как программно свзять СomboBox, из таблицей Regions, что бы получить список регионов, и при выборе данного региона в таблицю MembersInfo записывался его id???
Создайте 2 класса: в первом храните всю информацию из таблицы, в другом экземпляры первого класса.
Дальше из второго (из коллекции) грузите данные на форму. Ну и при выборе обращайтесь к списку, а внутри него просите id. понятно?
Простите, а можно код….я уже весь инет облазил, и толковое не чего не нашел?. Очень нужно
Вот так я заполнил СomboBox на форме MembersInfo:
Теперь у меня есть метод добавления новой записи в таблицу MembersInfo
Ну id выбранного из СomboBox региона в таблицу не в носится, выдает сообщения: Несоответствие типов данных в выражении условия отбора.
Пожалуйста посмотрите мой код!
Подскажите, В своем проекте я использовал этот способ все отлично работает но как реализовать сохранения изменений в таблице выбранной в combobox через кнопку.????????
Добрый день!
Что именно вы хотите сделать? Насколько я понял:
1. Загрузить данные
2. Отредактировать
3. Сохранить их в БД.
В чем именно у вас возникает сложность?
Если вы не знаете, как сделать запрос, то у вас есть метод button2_Click:
В нем я собираю строку соединения (DataProvider + то, что выбрал пользователь в Combobox). Открываю соединение, делаю запрос для выборки всех в адаптер — это самое интересное. Дальше выкидываю это на форму. Для UPDATE и INSERT Adapter не нужен.
Можно написать примерно такой код:
Похожий пример я нашел на stackoverflow.com. Разница у вас в том, что при динамической работе с БД вам придется собирать строку для UPDATE и соответственно подбирать параметры.
Я ответил на вопрос?
Если можно для ДУРАКОВ). на примере вашей программы что именно писать в update.
Знакомлюсь с програмированием в целом 2 неделю многое дается с трудом в понимании.
Давайте тогда так…
Почитайте сначала про SQL. Есть неплохая книжка для начинающих.
Алан Бьюли, Изучаем SQL Там само описание языка SQL, без привязке к конкретной реализации.
Дальше, если вам нужно работать именно в MDB можно читать MSDN, гуглить по поводу OleDb.
А насчет примера. Что именно вы бы хотели увидеть?
Спасибо за книжку неприменимо почитаю, но сейчас времени на этом совсем нету нужно сдавать диплом. для моей специальности (прикладная информатика в экономике) достаточно бы было просто создать бд в акцесе и все но я решил усложнить себе жизнь и добавить чуток программирования. Все по сути готова кроме этой кнопки для внесения изменений в открытой таблице.
или так
в первом случае ошибка во втором компилируеться но не работает )
Доброго дня! Спасибо за статью) Очень помогла) Только есть вопрос: как разбить таблицы с БД по разным comboBox-ам, а именно выборка таблиц для разных comboBox за условием? Например: в comboBox(Салаты) выводить только таблицы с рецептами салатов и т.д. И как уже в dataGridView вывести не все поля?
Спасибо))))
Здравствуйте, Екатерина!
Что бы выбрать в разные комбобоксы нужно написать различные SQL-запросы (по одному для каждой категории). Даже не совсем SQL-запросы.
Выборка таблиц происходит тут:
Соответственно вам нужен метод GetSchema(). Почитать кратко о нем можно на MSDN
Например, что бы выбрать таблицу с определенным именем можно сделать так:
Вторая часть вопроса касается dataGridView.
Здесь уже простые SQL-запросы. Для каждого случая их придется написать отдельно. Рассмотрите метод, где у меня выполняется запрос:
Вот это сам SQL-запрос (он собирается по кусочкам):
Для того, что бы выбрать отдельные поля нужно его просто изменить. Например, для таблицы клиенты я сделал так:
Этот запрос выбирает только КодЗаказа и КодКлиента.
Приложение будет выглядеть так:
Огромное спасибо!) (Как могу отблагодарить?)
Все работает, только кода получилось многовато) Думаю и так сойдет!)
Вы очень толково объясняете, что добавляет вам кучу плюсов!) Думаю я обращусь еще не раз именно к вам)
Ой, да пожалуйста :)
Пишите, спрашивайте — по возможности отвечу :)
Успехов!
есть база данных access и среда программирования C#
есть несколько связанных таблиц
эти таблицы нужно вывести на форму в таблицы и иметь возможность выбрав что-то в одной таблице — получить из-за связи нужное значение в другой
можете написать, как эти сделать?
Насколько я понимаю, ваша проблема решается пересечением таблиц.
Рекомендую почитать по поводу Joins / inner join / left join и так далее.
Пример? Я пошел на TechNet и вот что там взял:
Примерно так оно и выглядит.
я не очень хорошо понял данный пример, да и с sql у меня проблемы, вы можете скинуть рабочий пример?
К сожалению, сейчас слишком мало времени.
Вы можете посмотреть этот комментарий. Я там говорю про SQL-запросы.
Учите SQL. Вам это поможет.
Автор, ты просто космос!!!!!!!!!!
я везде именно это и искал, спасибо тебе огромное!!!