Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250

Вывод только пользовательских запросов, Access

04.05.2016, 00:53. Показов 882. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Подскажите пожалуйста, можно ли, как то, получить из базы данных только запросы, созданные пользователем?

Есть некая база данных. В ней есть некие таблицы(без разницы, сколько). А так же, есть несколько пользовательских запросов, сохранённых в самой базе данных. Их, так же, можно вывести в таблицу через сам Access.
Так вот, меня интересует, можно ли в C#, как то, выполнить пользовательских запросов из базы данных и вывод их на экран?

Вот код, как я считываю все таблицы(пользовательские) из базы данных:
Кликните здесь для просмотра всего текста

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
public static List<System.Data.DataTable> GetAllTables(String _DataBasePath, String _DataBasePassword, _Enum_AccessDataBaseProvider _DataBaseProvider, bool ShowTableColumnDataType_inTableRow, bool ShowTableColumnDataType_inColumnName, bool OnlyUsersTables, bool AddEmptyTables)
{
List<System.Data.DataTable> _Result = new List<System.Data.DataTable>();
{
System.Data.OleDb.OleDbConnection _OleDbConnection = _getOleDbConnection(_DataBasePath, _DataBasePassword, _DataBaseProvider);//Здесь у меня вызывается метод, который создаёт подключение и возвращает его при удачном подключении(проверяет "правильность" введённых данных. В случае какой либо ошибки-возвращается null)
if (_OleDbConnection != null)
{
try
{
if (_OleDbConnection.State != System.Data.ConnectionState.Open) _OleDbConnection.Open();
{
_Result.Add(_OleDbConnection.GetSchema("Tables", OnlyUsersTables ? new String[] { null, null, null, "Table" } : null));
for (int i = 0; i < _Result.First().Rows.Count; i++)
{
System.Data.OleDb.OleDbCommand _OleDbCommand = new System.Data.OleDb.OleDbCommand(String.Format("SELECT * FROM {0};", _Result.First().Rows[i][2].ToString()), _OleDbConnection);
System.Data.OleDb.OleDbDataReader _OleDbDataReader = _OleDbCommand.ExecuteReader();
while (_OleDbDataReader.Read())
{
List<Object> _NewRow = new List<Object>();
for (int j = 0; j < _OleDbDataReader.FieldCount; j++) _NewRow.Add(_OleDbDataReader.GetValue(j));
_tmp_Result.Rows.Add(_NewRow.ToArray());
}
_Result.Add(_tmp_Result);
}
else if (AddEmptyTables) _Result.Add(new System.Data.DataTable(_Result.First().Rows[i][2].ToString()));
}
}
}
catch (Exception error)
{
_onGetAnyException(error);
_Result = null;
}
finally
{
if (_OleDbConnection.State == System.Data.ConnectionState.Open) _OleDbConnection.Close();
}
}
}
return _Result;
}
Ну и, кому надо было, сам метод проверки подключения:
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
private static System.Data.OleDb.OleDbConnection _getOleDbConnection(String _DataBasePath, String _DataBasePassword, _Enum_AccessDataBaseProvider _DataBaseProvider)
{
System.Data.OleDb.OleDbConnection Result = null;
{
String _connectionString = String.Empty;
{
_connectionString += String.Format("Provider={0};", _getProvider(_DataBaseProvider).ToString());
if (_DataBasePassword != null || _DataBasePassword != String.Empty) _connectionString += String.Format("JET OLEDB:DataBase Password={0};", _DataBasePassword);
_connectionString += String.Format("Data Source={0}", _DataBasePath);
Result = new System.Data.OleDb.OleDbConnection(_connectionString);
try
{
if (Result.State != System.Data.ConnectionState.Open) Result.Open();
catch(Exception error)
{
_onGetAnyException(error);
Result = null;
}
finally
{
if (Result != null || Result.State == System.Data.ConnectionState.Open) Result.Close();
}
}
return Result;
}


Добавлено через 12 минут
Цитата Сообщение от Jack Wade Посмотреть сообщение
Так вот, меня интересует, можно ли в C#, как то, выполнить пользовательских запросов из базы данных и вывод их на экран?
Немного неправильно выразился: меня интересует, можно ли получить получить все пользовательские запросы из базы данных и вывести их в некую таблицу? Именно запросы, не таблицы. Названия запросов и таблиц нам не известны. В методе, который я привёл идёт получение всех таблиц из нам не известной базы данных.
Грубо говоря, нужно сделать нечто похожее, только уже с сохранёнными пользовательскими запросами. Именно с запросами.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2016, 00:53
Ответы с готовыми решениями:

Вывод данных в БД Access 2003 при использование SQL запросов. Delphi
Добрый день или вечер Камрады, столкнулся с проблемой при использование структуры &quot;insert into&quot;, кто-нибудь может подсказать как...

ASP.NET + Excel: вывод результатов запросов пользователей не только в HTML виде
Добрый день! Пытаюсь подружить свое web-приложение с excel, чтобы выводить результаты запросов пользователей не только в HTML виде. ...

Создание запросов и дополнительных запросов MS Access. Как првильно делать.
Здрасте всем. Может кто-то может мне тупому объяснить что-нибудь по запросам и дополнительным запросам в MS Access, мат. часть читал, не...

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
04.05.2016, 02:16
Jack Wade, GetOleDbSchemaTable() с OleDbSchemaGuid.Procedures должна вернуть нужный результат.
0
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
04.05.2016, 17:11  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
GetOleDbSchemaTable() с OleDbSchemaGuid.Procedures должна вернуть нужный результат.
Ну, попробовал, конечно, правда ничего так и не вышло.
Сделал базу, добавил таблицы. После этого, сделал один пользовательский запрос(база данных содержала в себе таблицы и один запрос, который использовал все имеющиеся таблицы).
Но в полученной таблице не было ни одной записи. Таблица была просто... пустой.

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

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
public static List<System.Data.DataTable> GetAllProceduresTables(String DataBasePath, String DataBasePassword, enum_AccessDataBaseProvider DataBaseProvider)
        {
            List<System.Data.DataTable> result = new List<System.Data.DataTable>();
            {
                System.Data.OleDb.OleDbConnection oleDbConnection = _getOleDbConnection(DataBasePath, DataBasePassword, DataBaseProvider);
                if (oleDbConnection != null)
                {
                    try
                    {
                        if (oleDbConnection.State != System.Data.ConnectionState.Open) oleDbConnection.Open();
                        System.Data.DataTable proceduresDataTable = oleDbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Procedures, null);
                        if (proceduresDataTable.Rows.Count > 0) result.Add(proceduresDataTable);
                    }
                    catch(Exception error)
                    {
                        _onGetAnyException(error);
                        result = null;
                    }
                    finally
                    {
                        if (oleDbConnection.State == System.Data.ConnectionState.Open) oleDbConnection.Close();
                    }
                }
            }
            return result;
        }


Может быть, в oleDbConnection.GetOleDbSchemaTable надо было параметры указать? Если да, то какие?
0
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
04.05.2016, 17:25  [ТС]
Вот, к стати, схема базы данных(не знаю зачем, но... вот):
Миниатюры
Вывод только пользовательских запросов, Access  
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
05.05.2016, 01:32
Jack Wade, попробуй GetOleDbSchemaTable с параметром OleDbSchemaGuid.Views. Проверил на Access 2010. Список запросов вернулся.
0
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
06.05.2016, 12:59  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
попробуй GetOleDbSchemaTable с параметром OleDbSchemaGuid.Views. Проверил на Access 2010. Список запросов вернулся.
Благо дарю!
Список пользовательских запросов вернулся, наконец то...

Вот метод(кому нужно):
Кликните здесь для просмотра всего текста

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
public static List<System.Data.DataTable> GetAllProceduresTables(String DataBasePath, String DataBasePassword, enum_AccessDataBaseProvider DataBaseProvider, bool ShowTableColumnDataType_inTableRow, bool ShowTableColumnDataType_inColumnName, bool AddEmptyTables, bool ShowMessageOnGetException)
        {
            List<System.Data.DataTable> result = new List<System.Data.DataTable>();
            {
                System.Data.OleDb.OleDbConnection oleDbConnection = _getOleDbConnection(DataBasePath, DataBasePassword, DataBaseProvider, ShowMessageOnGetException);
                if (oleDbConnection != null)
                {
                    try
                    {
                        if (oleDbConnection.State != System.Data.ConnectionState.Open) oleDbConnection.Open();
                        System.Data.DataTable proceduresDataTable = oleDbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Views, null);
                        if (proceduresDataTable.Rows.Count > 0)
                        {
                            result.Add(proceduresDataTable);
                            System.Data.OleDb.OleDbCommand oleDbCommand = null;
                            System.Data.OleDb.OleDbDataReader oleDbDataReader = null;
                            {
                                for (int i=0; i<result.First().Rows.Count; i++)
                                {
                                    oleDbCommand = new System.Data.OleDb.OleDbCommand(String.Format("SELECT * FROM {0};", result.First().Rows[i][2].ToString()), oleDbConnection);
                                    oleDbDataReader = oleDbCommand.ExecuteReader();
                                    if (oleDbDataReader.HasRows)
                                    {
                                        System.Data.DataTable _newTable = new System.Data.DataTable(String.Format("Запрос : {0}", result.First().Rows[i][2].ToString()));
                                        for (int j = 0; j < oleDbDataReader.FieldCount; j++) _newTable.Columns.Add(oleDbDataReader.GetName(j).ToString() + (ShowTableColumnDataType_inColumnName ? String.Format("({0})", oleDbDataReader.GetFieldType(j).ToString()) : null));
                                        if (ShowTableColumnDataType_inTableRow)
                                        {
                                            List<String> _newRow = new List<String>();
                                            for (int j = 0; j < oleDbDataReader.FieldCount; j++) _newRow.Add(oleDbDataReader.GetFieldType(j).ToString());
                                            _newTable.Rows.Add(_newRow.ToArray());
                                        }
                                        while (oleDbDataReader.Read())
                                        {
                                            List<String> _newRow = new List<String>();
                                            for (int j = 0; j < oleDbDataReader.FieldCount; j++) _newRow.Add(oleDbDataReader.GetValue(j).ToString());
                                            _newTable.Rows.Add(_newRow.ToArray());
                                        }
                                        result.Add(_newTable);
                                    }
                                    else if (AddEmptyTables)
                                    {
                                        System.Data.DataTable _newTable = new System.Data.DataTable(result.First().Rows[i][2].ToString());
                                        for (int j = 0; j < oleDbDataReader.FieldCount; j++) _newTable.Columns.Add(oleDbDataReader.GetName(j).ToString() + (ShowTableColumnDataType_inColumnName ? String.Format("({0})", oleDbDataReader.GetFieldType(j).ToString()) : null));
                                        if (ShowTableColumnDataType_inTableRow)
                                        {
                                            List<String> _newRow = new List<String>();
                                            for (int j = 0; j < oleDbDataReader.FieldCount; j++) _newRow.Add(oleDbDataReader.GetFieldType(j).ToString());
                                            _newTable.Rows.Add(_newRow.ToArray());
                                        }
                                        result.Add(_newTable);
                                    }
                                }
                            }
                        }
                    }
                    catch(Exception error)
                    {
                        if (ShowMessageOnGetException) _onGetAnyException(error);
                        else
                        {
                            if (oleDbConnection.State == System.Data.ConnectionState.Open) oleDbConnection.Close();
                            throw error;
                        }
                        result = null;
                    }
                    finally
                    {
                        if (oleDbConnection.State == System.Data.ConnectionState.Open) oleDbConnection.Close();
                    }
                }
            }
            return result;
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2016, 12:59
Помогаю со студенческими работами здесь

Вывод пользовательских св-в каталога
В общем задача такова: Необходимо вывести пользовательские свойства товара на странице детального просмотра. В arResult в шаблоне...

Вывод пользовательских символов на дисплей
Создал символы в LiquidCrystal.h, вывожу так: String mas = {&quot;A&quot;,&quot;\0&quot;}; String s = &quot;\0A&quot;; lcd.print(mas);//нормально выводится ...

Создание запросов в БД MS Access
Дана таблица &quot;точки&quot; с тремя полями: &quot;row&quot; (координата x), &quot;col&quot; (координата y), &quot;letter&quot; (имя точки). Нужно создать запрос...

Хранение запросов access
у меня есть 100 запросов в базе. при входе в базу все запросы сразу отображаются. можно ли как-то хранить запросы в access другим...

Работа в Access создание запросов
Здравствуйте! Помогите, пожалуйста, студентке заочнице. Вопрос такой: Можно ли в Microsoft access при создании запроса, построить формулу,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru