Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
#1

Получение всех названий таблиц из базы данных (ACCESS) - C#

27.05.2014, 17:05. Просмотров 3028. Ответов 13
Метки нет (Все метки)

Здравствуйте!
Подскажите пожалуйста...
Мне нужно получить название всех таблиц из базы данных.
Мне это нужно для того, чтобы выводить все таблицы из неопределённой базы данных формата Microsoft Access, при условии, что название таблиц у нас не известно.
Я сделал занесение данных из определённой таблицы определённой базы данных и вывод всех значений из всех столбцов с получением их имени(в общем-мне для того, чтобы загружать любую БД MS Access осталось лишь получить название таблиц).
Но вот как мне это сделать-я не знаю.
P.S. Думаю, просто если возможно получить название столбцов в таблице, возможно получение и наименований самих таблиц и запросов в БД, и, соответственно, их количество. Хочу написать программу, которая бы создавала список из DataGridView, и выводила все данные из неё...
Вот код, который есть на данный момент:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace _Visual_C_Sharp__Базы_Данных_MS_Access
{
    public partial class Form1 : Form
    {
        #region Подключение/создание всех необходимых компонентов для подключения Базы Данных Microsoft Accsess 2003
            public System.Data.OleDb.OleDbConnection _This_OleDBConnection;
            public System.Data.OleDb.OleDbCommand _This_OleDBCommand;
            public System.Data.OleDb.OleDbDataReader _This_OleDBDataReader;
            public System.Data.OleDb.OleDbConnectionStringBuilder _This_OleDBConnectionString;
            /*
             *  OleDbConnection - конструктор строки подключения(необходим для подключения к базе данных)
             *  OleDbCommand    - поток строк с данными(необходим для получения результата SQL-запроса)
             *  OleDbDataReader - поток чтения данных(необходим для чтения данных из таблицы)
             *  OleDbConnectionStringBuilder - SQL-запрос(конструктор SQL-запросов)
             */
        #endregion
        public Form1()
            {
                InitializeComponent();
                #region Инициализация параметров формы
                {
                    this.Text = "ADO.NET MS ACCESS EXAMPLE";
                    this.Size = new Size(800, 400);
                    this.MaximumSize = this.Size;
                    this.MinimumSize = this.Size;
                    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
                    this.StartPosition = FormStartPosition.CenterScreen;
                }
                #endregion
                #region Подключаем базу данных
                this._This_OleDBConnection = new System.Data.OleDb.OleDbConnection();
                this._This_OleDBConnectionString = new System.Data.OleDb.OleDbConnectionStringBuilder();
                this._This_OleDBConnectionString.Provider = "Microsoft.Jet.Oledb.4.0";
                this._This_OleDBConnectionString.DataSource = "Автосалон.mdb";
                this._This_OleDBConnection.ConnectionString = this._This_OleDBConnectionString.ToString();
                this._This_OleDBConnection.Open();
                /*
                 *  Сперва мы создаём новый экземпляр объекта OleDbConnection
                 *  После этого, создаём новый экземпляр для OleDbConnectionString
                 *  Далее мы указываем провайдера Microsoft.Jet.Oledb версии 4.0
                 *  После этого, в параметре DataSource мы указываем путь к базе данных(в данном случае-она находится в папке с исполняемым файлом)
                 *  После этого, мы указываем в OleDbConnection с параметре источника базы данных данные из OleDbConnectionString(предварительно, переведя её в String формат(через метод ToString()))
                 *  И в конце мы просто открываем соединение между базой данных и данной программой
                 */
                #endregion
                #region Создаём новые DataGridView и заносим туда все данные из подключённой базы данных
                List<DataGridView> DataTableList = new List<DataGridView>();
                #endregion
                #region Пример подключения таблицы к DataGridView, с заранее известным названием таблицы
                ////ДЛЯ ПРОВЕРКИ РАБОТОСПОСОБНОСТИ-ПРОСТО ТУПО РАССКОМЕНТИРУЙТЕ ДАННУЮ ЧАСТЬ КОДА
                //this._This_OleDBCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM Клиент", this._This_OleDBConnection);
                //this._This_OleDBDataReader = this._This_OleDBCommand.ExecuteReader();
                //DataGridView ExampleDataGridView = new DataGridView();
                //ExampleDataGridView.Columns.Add("1", "Фамилия");
                //ExampleDataGridView.Columns.Add("2", "Имя");
                //ExampleDataGridView.Columns.Add("3", "Отчество");
                //if (this._This_OleDBDataReader.HasRows)
                //{
                //    Int32 Index = new Int32();
                //    while (this._This_OleDBDataReader.Read())
                //    {
                //        ExampleDataGridView.RowCount++;
                //        ExampleDataGridView[0, Index].Value = this._This_OleDBDataReader["ИмяКлиента"].ToString();
                //        ExampleDataGridView[1, Index].Value = this._This_OleDBDataReader["ФамилияКлиента"].ToString();
                //        ExampleDataGridView[2, Index].Value = this._This_OleDBDataReader["ОтчествоКлиента"].ToString();
                //        Index++;
                //    }
                //}
                //ExampleDataGridView.Size = this.ClientSize;
                //{
                //    ExampleDataGridView.ReadOnly = true;
                //    ExampleDataGridView.AllowUserToResizeRows = false;
                //    ExampleDataGridView.AllowUserToResizeColumns = false;
                //    ExampleDataGridView.AllowUserToOrderColumns = false;
                //    ExampleDataGridView.AllowUserToDeleteRows = false;
                //    ExampleDataGridView.AllowUserToAddRows = false;
                //    ExampleDataGridView.RowHeadersVisible = false;
                //    ExampleDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                //}
                //this.Controls.Add(ExampleDataGridView);
                //this._This_OleDBCommand.Clone();
                //this._This_OleDBConnection.Close();
                //this._This_OleDBConnectionString.Clear();
                //this._This_OleDBDataReader.Close();
                ///*
                // *  ОПИСАНИЕ ХОДА ДЕЙСТВИЙ:
                // *      Сперва мы сделали новый запрос к базе данных. В запросе мы прописали получение всех столбцов их таблицы Клиент
                // *      В качестве источника получения данных была указана ранее подключённая база данных OleDbConnection.
                // *      И после этого в объекте чтения потока данных OleDbDataReader мы указали получение данных из базы данных через созданное подключение.
                // *      Для этого мы использовали метод ExecuteReader()(он возвращает ComandText, т.е. он получает все найденные значния из заданной таблицы)
                // *      После этого, была создана новая таблица DataGridView. Перечислять её настройку не буду-ибо не в этом суть...
                // *      После этого, был объявлен цикл до тех пор, пока в потоке получения данных есть не пройденные строки(HasRows)
                // *      Чтение данных мы осуществляем через OleDbDataReader. Значение столбца в строке мы получаем через его название(хотя никто не запрещает это делать через индексатор).
                // *      При получении данных мы их переводим в строку и отображаем в DataGridView.
                // *      В конечном итоге-мы просто подключаем полученный DataGridView к текущей форме, после чего-закрываем подключение, т.к. оно нам больше не понадобится.                 *      
                // */
                #endregion
                #region Пример подключения к таблице DataGridView запроса
                ////РАССКОМЕНТИРУЙТЕ ДЛЯ ПРОВЕРКИ РЕЗУЛЬТАТА
                //this._This_OleDBCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM ГлавныйЗапрос", this._This_OleDBConnection);
                //this._This_OleDBDataReader = this._This_OleDBCommand.ExecuteReader();
                //DataGridView ExampleDataGridView = new DataGridView();
                //ExampleDataGridView.ColumnCount = this._This_OleDBDataReader.FieldCount;
                //if (this._This_OleDBDataReader.HasRows)
                //{
                //    for (int i = 0; i < ExampleDataGridView.ColumnCount; i++)
                //    {
                //        ExampleDataGridView.Columns[i].HeaderText = this._This_OleDBDataReader.GetName(i).ToString();
                //    }
                //    Int32 Index = new Int32();
                //    while (this._This_OleDBDataReader.Read())
                //    {
                //        ExampleDataGridView.RowCount++;
                //        for (int i = 0; i < ExampleDataGridView.ColumnCount; i++)
                //        {
                //            ExampleDataGridView[i, Index].Value = this._This_OleDBDataReader[i].ToString();
                //        }
                //        Index++;
                //    }
                //}
                //ExampleDataGridView.Size = this.ClientSize;
                //{
                //    ExampleDataGridView.ReadOnly = true;
                //    ExampleDataGridView.AllowUserToResizeRows = false;
                //    ExampleDataGridView.AllowUserToResizeColumns = false;
                //    ExampleDataGridView.AllowUserToOrderColumns = false;
                //    ExampleDataGridView.AllowUserToDeleteRows = false;
                //    ExampleDataGridView.AllowUserToAddRows = false;
                //    ExampleDataGridView.RowHeadersVisible = false;
                //    ExampleDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                //}
                //this.Controls.Add(ExampleDataGridView);
                ///*
                // *  ОПИСАНИЕ КОДА:
                // *      Здесь в общем происходит всё тоже самое, что и при подключении обычной таблицы.
                // *      Исключение здесь только в том, что в запросе у нас сразу отображаются все нам нужные данные.
                // *      И ещё-здесь используются следующие свойства:
                // *          OleDbDataReader.FieldCount = получает количество столбцов в выбранной таблице
                // *          И получение значений из столбцов через индексатор.
                // */
                #endregion
            }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 17:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получение всех названий таблиц из базы данных (ACCESS) (C#):

Извлечение названий таблиц из базы данных - C#
Как узнать название всех таблиц базы данных, и 'запихнуть' эти названия в ComboBox?

Вывод названий таблиц базы данных в Link Label - C#
Добрый день. Нужна ваша помощь. Пытаюсь вывести данные из БД в компонент linklabel, однако отображается лишь один элемент, несмотря на то,...

Получение списка таблиц бд Access - C#
Добрый денЬ, я пытаюсь получить список таблиц в базе следующим запросом: Select MSysObjects.Name From MSysObjects Where...

Создание базы, таблиц и полей в MS Access - C#
Вступление... Готово кода не жду, хватит направлений, ссылок и подсказок. Задача... Требуется через C# создать файл базы данных...

Узнать название всех таблиц в бд Access - C#
Можно ли как-то узнать название всех таблиц в эксесе с помощью кода не водя * FROM Картриджи&quot; вручную? OleDbCommand myAccessCommand =...

Создания базы данных и таблиц в базу данных в SQL Server Managment Studio - C#
Здраствуйте. Нужно создать такую маленькую программу при помощи которой можно создать базу данных и таблицы в ней в SQL Server Managment...

13
nmcf
5754 / 5065 / 1733
Регистрация: 14.04.2014
Сообщений: 20,749
27.05.2014, 19:11 #2
У соединения есть метод GetSchema().
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
27.05.2014, 19:37  [ТС] #3
Ну да. В результате получаем DataTable, а вот дальше-я немного не понял...
Можете подсказать, где конкретно искать там названия таблиц и, соответственно, их количество?
0
nmcf
5754 / 5065 / 1733
Регистрация: 14.04.2014
Сообщений: 20,749
27.05.2014, 21:44 #4
http://msdn.microsoft.com/library/ms254969.aspx
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
28.05.2014, 01:00  [ТС] #5
В DataTable, который получается при использовании метода GetShcema() нету ничего такого, что мне нужно(либо я плохо искал)...
Можете лучше вместо ссылок дать код(если не сложно)?
0
Spawn
966 / 864 / 293
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.05.2014, 01:18 #6
Цитата Сообщение от Jack Wade Посмотреть сообщение
нету ничего такого, что мне нужно(либо я плохо искал)...
А как искали? Учитывая, что заполняется DataTable, трудно что-то дополнительно подсказывать... Вашими глазами же не посмотрим...
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
28.05.2014, 01:32  [ТС] #7
Spawn, ну я смотрел в параметрах и методах объекта DataTable, и там не было толком ничего такого, что мне нужно было.
Я получаю DataTable из OleDbConnection, после чего хочу, для примера, просто вывести в MessageBox кол-ство таблиц в базе данных. Но среди всех параметров там не было ни одного, который бы, по описанию, тем, что мне нужно...
Либо, это я что то не понимаю, либо DataTable несколько не то, что мне нужно...
Опять же, мне нужно получить количество и название всех таблиц в базе данных, созданная в Microsoft Access, и сохранённая в старом формате 2003-2004. Провайдер в OleDbConnection = Microsoft.Jet.Oledb.4.0.
Вот, как я получаю DataTable:
C#
1
2
3
4
5
6
7
8
this._This_OleDBConnection = new System.Data.OleDb.OleDbConnection();
this._This_OleDBConnectionString = new System.Data.OleDb.OleDbConnectionStringBuilder();
this._This_OleDBConnectionString.Provider = "Microsoft.Jet.Oledb.4.0";
this._This_OleDBConnectionString.DataSource = "Автосалон.mdb";
this._This_OleDBConnection.ConnectionString = this._This_OleDBConnectionString.ToString();
this._This_OleDBConnection.Open();
 
DataTable tmp = this._This_OleDBConnection.GetSchema();
0
kodv
1403 / 1077 / 235
Регистрация: 11.04.2011
Сообщений: 2,589
Завершенные тесты: 1
28.05.2014, 05:48 #8
Цитата Сообщение от Jack Wade Посмотреть сообщение
В DataTable, который получается при использовании метода GetShcema() нету ничего такого, что мне нужно(либо я плохо искал)...
вам просто nmcf дал не правильную ссылку. Правильная ссылка эта. Пройдя по этой ссылке вы без пробелм можете узнать, что если вызвать не GetSchema(), а GetSchema("Tables"), то можно получить список таблиц, доступных для данного подключения.
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
28.05.2014, 09:55  [ТС] #9
Большое спасибо, что ничем толком не помогли, кроме как направить в Яндекс...
Я нашёл здесь другую тему, где был описан следующий код:
C#
1
2
3
4
5
6
DataTable _This_DataBaseTables = this._This_OleDBConnection.GetSchema("Tables", new[] { null, null, null, "TABLE" });
                List<String> _This_TableNameList = new List<string>();
                _This_TableNameList.AddRange(from DataRow item in _This_DataBaseTables.Rows select item["TABLE_NAME"].ToString());
                String Result = String.Empty;
                foreach (String Data in _This_TableNameList) Result += Data.ToString() + "\n";
                MessageBox.Show(Result);
Надеюсь-хотя бы другому человеку, который так же, захочет получить все таблицы(их название, количество и сами таблицы в некоторый список DataGridView) поможет данный код...

Вот полное подключение базы данных и получение наименований всех таблиц из базы данных:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
this._This_OleDBConnection = new System.Data.OleDb.OleDbConnection();
                this._This_OleDBConnectionString = new System.Data.OleDb.OleDbConnectionStringBuilder();
                this._This_OleDBConnectionString.Provider = "Microsoft.Jet.Oledb.4.0";
                this._This_OleDBConnectionString.DataSource = "Автосалон.mdb";
                this._This_OleDBConnection.ConnectionString = this._This_OleDBConnectionString.ToString();
                this._This_OleDBConnection.Open();
 
DataTable _This_DataBaseTables = this._This_OleDBConnection.GetSchema("Tables", new[] { null, null, null, "TABLE" });
                List<String> _This_TableNameList = new List<string>();
                _This_TableNameList.AddRange(from DataRow item in _This_DataBaseTables.Rows select item["TABLE_NAME"].ToString());
                String Result = String.Empty;
                foreach (String Data in _This_TableNameList) Result += Data.ToString() + "\n";
                MessageBox.Show(Result);
0
kodv
1403 / 1077 / 235
Регистрация: 11.04.2011
Сообщений: 2,589
Завершенные тесты: 1
28.05.2014, 10:24 #10
Цитата Сообщение от Jack Wade Посмотреть сообщение
что ничем толком не помогли, кроме как направить в Яндекс...
Ну вот видите, Яндекс - сила. Помог же Яндекс?
Цитата Сообщение от kodv Посмотреть сообщение
если вызвать не GetSchema(), а GetSchema("Tables"), то можно получить список таблиц
Не то? Или вы дальше ссылки с Яндексом мой пост не читали?
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
28.05.2014, 10:28  [ТС] #11
На всякий случай, выложу ещё то, что я и хотел получить в конечном итоге(программа как бы, может загружать любую базу данных и получать все её таблицы и выводить их в DataGridView, после чего отображать их на форме).
Короче-я то написал, что хотел, просто, если говорить честно, вот этого вашего "юмора" с Яндексом и Гууглом, я особо не перевариваю...
Кликните здесь для просмотра всего текста

Не по теме:

Если бы хотели помочь-то помогли бы кодом. Просто, некоторые отвечают здесь, "абы ответить"... Не в обиду, просто, "если хотите помочь-то помогите"...


Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace _Visual_C_Sharp__Базы_Данных_MS_Access
{
    public partial class Form1 : Form
    {
        #region Подключение/создание всех необходимых компонентов для подключения Базы Данных Microsoft Accsess 2003
            public System.Data.OleDb.OleDbConnection _This_OleDBConnection;
            public System.Data.OleDb.OleDbCommand _This_OleDBCommand;
            public System.Data.OleDb.OleDbDataReader _This_OleDBDataReader;
            public System.Data.OleDb.OleDbConnectionStringBuilder _This_OleDBConnectionString;
            /*
             *  OleDbConnection - конструктор строки подключения(необходим для подключения к базе данных)
             *  OleDbCommand    - поток строк с данными(необходим для получения результата SQL-запроса)
             *  OleDbDataReader - поток чтения данных(необходим для чтения данных из таблицы)
             *  OleDbConnectionStringBuilder - SQL-запрос(конструктор SQL-запросов)
             */
        #endregion
        public Form1()
            {
                InitializeComponent();
                #region Инициализация параметров формы
                {
                    this.Text = "ADO.NET MS ACCESS EXAMPLE";
                    this.Size = new Size(800, 400);
                    this.MaximumSize = this.Size;
                    this.MinimumSize = this.Size;
                    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
                    this.StartPosition = FormStartPosition.CenterScreen;
                }
                #endregion
                #region Подключаем базу данных
                this._This_OleDBConnection = new System.Data.OleDb.OleDbConnection();
                this._This_OleDBConnectionString = new System.Data.OleDb.OleDbConnectionStringBuilder();
                this._This_OleDBConnectionString.Provider = "Microsoft.Jet.Oledb.4.0";
                this._This_OleDBConnectionString.DataSource = "Автосалон.mdb";
                this._This_OleDBConnection.ConnectionString = this._This_OleDBConnectionString.ToString();
                this._This_OleDBConnection.Open();
                /*
                 *  Сперва мы создаём новый экземпляр объекта OleDbConnection
                 *  После этого, создаём новый экземпляр для OleDbConnectionString
                 *  Далее мы указываем провайдера Microsoft.Jet.Oledb версии 4.0
                 *  После этого, в параметре DataSource мы указываем путь к базе данных(в данном случае-она находится в папке с исполняемым файлом)
                 *  После этого, мы указываем в OleDbConnection с параметре источника базы данных данные из OleDbConnectionString(предварительно, переведя её в String формат(через метод ToString()))
                 *  И в конце мы просто открываем соединение между базой данных и данной программой
                 */
                #endregion
                #region Пример подключения таблицы к DataGridView, с заранее известным названием таблицы
                ////ДЛЯ ПРОВЕРКИ РАБОТОСПОСОБНОСТИ-ПРОСТО ТУПО РАССКОМЕНТИРУЙТЕ ДАННУЮ ЧАСТЬ КОДА
                //this._This_OleDBCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM Клиент", this._This_OleDBConnection);
                //this._This_OleDBDataReader = this._This_OleDBCommand.ExecuteReader();
                //DataGridView ExampleDataGridView = new DataGridView();
                //ExampleDataGridView.Columns.Add("1", "Фамилия");
                //ExampleDataGridView.Columns.Add("2", "Имя");
                //ExampleDataGridView.Columns.Add("3", "Отчество");
                //if (this._This_OleDBDataReader.HasRows)
                //{
                //    Int32 Index = new Int32();
                //    while (this._This_OleDBDataReader.Read())
                //    {
                //        ExampleDataGridView.RowCount++;
                //        ExampleDataGridView[0, Index].Value = this._This_OleDBDataReader["ИмяКлиента"].ToString();
                //        ExampleDataGridView[1, Index].Value = this._This_OleDBDataReader["ФамилияКлиента"].ToString();
                //        ExampleDataGridView[2, Index].Value = this._This_OleDBDataReader["ОтчествоКлиента"].ToString();
                //        Index++;
                //    }
                //}
                //ExampleDataGridView.Size = this.ClientSize;
                //{
                //    ExampleDataGridView.ReadOnly = true;
                //    ExampleDataGridView.AllowUserToResizeRows = false;
                //    ExampleDataGridView.AllowUserToResizeColumns = false;
                //    ExampleDataGridView.AllowUserToOrderColumns = false;
                //    ExampleDataGridView.AllowUserToDeleteRows = false;
                //    ExampleDataGridView.AllowUserToAddRows = false;
                //    ExampleDataGridView.RowHeadersVisible = false;
                //    ExampleDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                //}
                //this.Controls.Add(ExampleDataGridView);
                //this._This_OleDBCommand.Clone();
                //this._This_OleDBConnection.Close();
                //this._This_OleDBConnectionString.Clear();
                //this._This_OleDBDataReader.Close();
                ///*
                // *  ОПИСАНИЕ ХОДА ДЕЙСТВИЙ:
                // *      Сперва мы сделали новый запрос к базе данных. В запросе мы прописали получение всех столбцов их таблицы Клиент
                // *      В качестве источника получения данных была указана ранее подключённая база данных OleDbConnection.
                // *      И после этого в объекте чтения потока данных OleDbDataReader мы указали получение данных из базы данных через созданное подключение.
                // *      Для этого мы использовали метод ExecuteReader()(он возвращает ComandText, т.е. он получает все найденные значния из заданной таблицы)
                // *      После этого, была создана новая таблица DataGridView. Перечислять её настройку не буду-ибо не в этом суть...
                // *      После этого, был объявлен цикл до тех пор, пока в потоке получения данных есть не пройденные строки(HasRows)
                // *      Чтение данных мы осуществляем через OleDbDataReader. Значение столбца в строке мы получаем через его название(хотя никто не запрещает это делать через индексатор).
                // *      При получении данных мы их переводим в строку и отображаем в DataGridView.
                // *      В конечном итоге-мы просто подключаем полученный DataGridView к текущей форме, после чего-закрываем подключение, т.к. оно нам больше не понадобится.                 *      
                // */
                #endregion
                #region Пример подключения к таблице DataGridView запроса
                ////РАССКОМЕНТИРУЙТЕ ДЛЯ ПРОВЕРКИ РЕЗУЛЬТАТА
                //this._This_OleDBCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM ГлавныйЗапрос", this._This_OleDBConnection);
                //this._This_OleDBDataReader = this._This_OleDBCommand.ExecuteReader();
                //DataGridView ExampleDataGridView = new DataGridView();
                //ExampleDataGridView.ColumnCount = this._This_OleDBDataReader.FieldCount;
                //if (this._This_OleDBDataReader.HasRows)
                //{
                //    for (int i = 0; i < ExampleDataGridView.ColumnCount; i++)
                //    {
                //        ExampleDataGridView.Columns[i].HeaderText = this._This_OleDBDataReader.GetName(i).ToString();
                //    }
                //    Int32 Index = new Int32();
                //    while (this._This_OleDBDataReader.Read())
                //    {
                //        ExampleDataGridView.RowCount++;
                //        for (int i = 0; i < ExampleDataGridView.ColumnCount; i++)
                //        {
                //            ExampleDataGridView[i, Index].Value = this._This_OleDBDataReader[i].ToString();
                //        }
                //        Index++;
                //    }
                //}
                //ExampleDataGridView.Size = this.ClientSize;
                //{
                //    ExampleDataGridView.ReadOnly = true;
                //    ExampleDataGridView.AllowUserToResizeRows = false;
                //    ExampleDataGridView.AllowUserToResizeColumns = false;
                //    ExampleDataGridView.AllowUserToOrderColumns = false;
                //    ExampleDataGridView.AllowUserToDeleteRows = false;
                //    ExampleDataGridView.AllowUserToAddRows = false;
                //    ExampleDataGridView.RowHeadersVisible = false;
                //    ExampleDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                //}
                //this.Controls.Add(ExampleDataGridView);
                ///*
                // *  ОПИСАНИЕ КОДА:
                // *      Здесь в общем происходит всё тоже самое, что и при подключении обычной таблицы.
                // *      Исключение здесь только в том, что в запросе у нас сразу отображаются все нам нужные данные.
                // *      И ещё-здесь используются следующие свойства:
                // *          OleDbDataReader.FieldCount = получает количество столбцов в выбранной таблице
                // *          И получение значений из столбцов через индексатор.
                // */
                #endregion
                #region Получение списка названий всех таблиц из базы данных
                //DataTable _This_DataBaseTables = this._This_OleDBConnection.GetSchema("Tables", new[] { null, null, null, "TABLE" });
                //List<String> _This_TableNameList = new List<string>();
                //_This_TableNameList.AddRange(from DataRow item in _This_DataBaseTables.Rows select item["TABLE_NAME"].ToString());
                //String Result = String.Empty;
                //foreach (String Data in _This_TableNameList) Result += Data.ToString() + "\n";
                //MessageBox.Show(Result);
                #endregion
                #region Создание списка из DataGridView и занесение туда даных
                List<DataGridView> _This_DataTablesList = new List<DataGridView>();
                List<String> _THis_DataTableNameList = new List<String>();
                _THis_DataTableNameList.AddRange(from DataRow item in this._This_OleDBConnection.GetSchema("Tables", new[] { null, null, null, "TABLE" }).Rows select item["TABLE_NAME"].ToString());
                ComboBox _This_ListOfTablesComboBox = new ComboBox();
                foreach (String Data in _THis_DataTableNameList)
                {
                    _This_ListOfTablesComboBox.Items.Add(Data);
                    {
                        DataGridView NewTable = new DataGridView();
                        _This_DataTablesList.Add(NewTable);
                        this._This_OleDBCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM " + Data.ToString(), this._This_OleDBConnection);
                        this._This_OleDBDataReader = this._This_OleDBCommand.ExecuteReader();
                        NewTable.ColumnCount = this._This_OleDBDataReader.FieldCount;
                        if (this._This_OleDBDataReader.HasRows)
                        {
                            for (int i = 0; i < NewTable.ColumnCount; i++)
                            {
                                NewTable.Columns[i].HeaderText = this._This_OleDBDataReader.GetName(i).ToString();
                            }
                            Int32 Index = new Int32();
                            while (this._This_OleDBDataReader.Read())
                            {
                                NewTable.RowCount++;
                                for (int i = 0; i < NewTable.ColumnCount; i++)
                                {
                                    NewTable[i, Index].Value = this._This_OleDBDataReader[i].ToString();
                                }
                                Index++;
                            }
                        }
                        NewTable.Visible = false;
                        {
                            NewTable.Width = this.ClientSize.Width;
                            NewTable.Height = this.ClientSize.Height - 35;
                            NewTable.Left = 0;
                            NewTable.Top = 35;
                            {
                                NewTable.ReadOnly = true;
                                NewTable.AllowUserToResizeRows = false;
                                NewTable.AllowUserToResizeColumns = false;
                                NewTable.AllowUserToOrderColumns = false;
                                NewTable.AllowUserToDeleteRows = false;
                                NewTable.AllowUserToAddRows = false;
                                NewTable.RowHeadersVisible = false;
                                NewTable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                            }
                        }
                        this.Controls.Add(NewTable);
                    }
                }
                this.Controls.Add(_This_ListOfTablesComboBox);
                {
                    _This_ListOfTablesComboBox.Width = this.ClientSize.Width;
                    _This_ListOfTablesComboBox.Height = 35;
                    _This_ListOfTablesComboBox.Text = "Выбор таблицы";
                    _This_ListOfTablesComboBox.SelectedIndexChanged += new EventHandler(OnSelectDataTable);
                }
                #endregion
            }
        public void OnSelectDataTable(object Sender, EventArgs e)
        {
            for (int i = 0; i < this.Controls.Count-1; i++) this.Controls[i].Visible = false;
            Int32 SelectedItem = (Sender as ComboBox).SelectedIndex;
            this.Controls[SelectedItem].Visible = true;
        }
    }
}
2
kodv
28.05.2014, 10:58
  #12

Не по теме:

Цитата Сообщение от Jack Wade Посмотреть сообщение
просто, если говорить честно, вот этого вашего "юмора" с Яндексом и Гууглом, я особо не перевариваю...
на это я могу ответить, что я особо не перевариваю, когда участники форума не желают думать, а хотят получить готовое решение. Вам было сказано название метода, через который в итоге оказалось построено ваше итоговое решение. Вы же, вместо того, чтобы посмотреть описание метода, и понять принцип его работы. начали на форум постить, что он выдает совершенно не то, что вы от него хотите.
Цитата Сообщение от Jack Wade Посмотреть сообщение
Если бы хотели помочь-то помогли бы кодом.
Дубль два
Цитата Сообщение от kodv Посмотреть сообщение
если вызвать не GetSchema(), а GetSchema("Tables"), то можно получить список таблиц
Все же верно вроде написал ...

PS: продолжать данную дискуссию смысла не вижу

0
DmSide
22.03.2015, 23:13
  #13

Не по теме:

Благодарю, Jack Wade, за код. Только зачем именно так?

Цитата Сообщение от Jack Wade Посмотреть сообщение
Int32 Index = new Int32();
Чем вам просто
C#
1
int Index;
не угодил? Мне интересно узнать, в чем фишка делать именно так.

0
Fene4ka_
92 / 92 / 16
Регистрация: 24.01.2014
Сообщений: 1,220
23.03.2015, 14:11 #14
DmSide, спустя >пол года ))) разницы почти нету
0
23.03.2015, 14:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2015, 14:11
Привет! Вот еще темы с ответами:

.NET 3.x Получение названия базы данных - C#
Добрый день! Подскажите пожалуйста, можно ли как нибудь переписать данный код так, что бы можно было в TextBox вписать название базы данных...

MS Access Получение актуальных данных из базы - C#
Доброго времени суток, уважаемые форумчане. Проблема в следующем: была разработана база данных на основе dataset. Изначально...

Получение месяца с базы данных - C#
Хай всем. Такой вопрос: Есть база данных Microsoft Server. Там есть таблица, ну к примеру имеющая два столбца - id_customer( тип int) и...

создание таблиц базы данных - C#
прошу вашей помощи уважаемые гуру вопрос в следуещем есть форма на которой расположены два datagridwiev один отображает данные которые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.