Microsoft Access DB + C#: как получить имена всех столбцов из таблицы (Для любой таблицы в БД)?

Сегодня тут задали вопрос… как получить имена всех столбцов из таблицы? Ну что ж, все просто. Код для этого приложения я практически полностью взял из старого приложения, так как мне тоже надо было получать имена таблиц. Как это работает, написанно там.

Интерфейс простой

2 кнопки, Combobox (для названия таблиц в базе) и listbox для отображения названий колонок.

Код первой кнопки полностью повторяет старое приложение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
comboBox1.Items.Clear();
            if (openDBDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                OleDbConnection dbCon = new OleDbConnection(
            @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openDBDialog.FileName);
                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();
            }
comboBox1.Items.Clear();
            if (openDBDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                OleDbConnection dbCon = new OleDbConnection(
            @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openDBDialog.FileName);
                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();
            }

А вот во второй кнопке код частично новый:

1
2
3
4
5
6
7
8
9
10
11
OleDbConnection dbCon = new OleDbConnection(
 @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openDBDialog.FileName);
            dbCon.Open();
            OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter(@"SELECT * FROM " + comboBox1.SelectedItem, dbCon);
            DataTable dataTable = new DataTable();
            dbAdapter1.Fill(dataTable);
            dbCon.Close();
            foreach (var item in dataTable.Columns)
            {
                listBox1.Items.Add(item.ToString());
            }
OleDbConnection dbCon = new OleDbConnection(
 @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openDBDialog.FileName);
            dbCon.Open();
            OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter(@"SELECT * FROM " + comboBox1.SelectedItem, dbCon);
            DataTable dataTable = new DataTable();
            dbAdapter1.Fill(dataTable);
            dbCon.Close();
            foreach (var item in dataTable.Columns)
            {
                listBox1.Items.Add(item.ToString());
            }

Здесь делается запрос к таблице, потом создается объект для данных, потом этот объект наполняется данными, которые вернул запрос. После всего этого соединение с базой данных закрывается.

А далее циклом foreach пробегаем по dataTable.Columns и записываем в listBox1 тестовое представление от колонок :)

Получены колонки

Как обычно исходники можно скачать здесь.
На этот раз у меня стоит Visual Studio 2012, так что проект сделан в ней

10 Responses

  1. Nik 24.03.2013 / 18:05

    Предлагаю такой вариант:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    string con_str ="строка_подключения";
    OleDbConnection connection = new OleDbConnection(con_str);
    connection.Open();
     
    DataTable data_table = connection.GetSchema("Columns", new string[] { null, null, "имя_таблицы" });
    foreach (DataRow row in data_table.Rows)
                {
                    Console.WriteLine(row["COLUMN_NAME"]);
                }
    connection.Close();
    string con_str ="строка_подключения";
    OleDbConnection connection = new OleDbConnection(con_str);
    connection.Open();
    
    DataTable data_table = connection.GetSchema("Columns", new string[] { null, null, "имя_таблицы" });
    foreach (DataRow row in data_table.Rows)
                {
                    Console.WriteLine(row["COLUMN_NAME"]);
                }
    connection.Close();
  2. Dmitriyc 07.11.2016 / 20:35

    Привет, у меня возникла немного другая задача, я хочу вывести отдельный столбец в лист бокс. Например как вывести список столбцов в лист бокс я понял. А вот со строками не получается, собственно в коде я изменил Columns на Rows и листбокс заполняется строками System.Data.Rows

Добавить комментарий