Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, Entity Framework
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 1 / 1
Регистрация: 31.10.2011
Сообщений: 10
1
Другое

Универсальная SQL консоль DbConsole и спооб заполнения DataSet и DataTable

21.10.2017, 19:00. Показов 1682. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Давно выложена в сети открытая программа DBConsole
Кликните здесь для просмотра всего текста

В ней есть функционал подключения к различным БД через сервис-провайдера, который подключается к библиотекам, в которых уже подключены необходимые ссылки для разных типов БД.

Для выборки данных используется
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
public void ShowData(IDataReader Reader)
        {
            ListViewDataSet.Clear();
 
            int _Result = 0;
            bool _CreateColumns = true;
            while (Reader.Read())
            {
                //Создание колонок в списке
                if (_CreateColumns)
                {
                    ListViewDataSet.Columns.Add("").Width = 20;
 
                    for (int i = 0; i <= Reader.FieldCount - 1; i++)
                        ListViewDataSet.Columns.Add(Reader.GetName(i));
 
                    _CreateColumns = false;
                }
 
                ListViewItem NewItem;
                NewItem = ListViewDataSet.Items.Add("");
 
                for (int i = 0; i <= Reader.FieldCount - 1; i++)
                    NewItem.SubItems.Add(Reader.GetValue(i).ToString());
 
                _Result++;
            }
 
            ListViewDataSet.AlignColumns();  
            SQLStatusLabel.Text = string.Format("Выбрано {0} записей.", _Result);
        }
Для отображения данных используется DoubleBufferedListView.
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 class DoubleBufferedListView : ListView
    {
        public DoubleBufferedListView()
        {
            this.DoubleBuffered = true;
        }
 
        public void AlignColumns()
        {
            foreach (ColumnHeader _Column in this.Columns)
                _Column.Width = GetColumnGetColumnPreferredWidth(this, _Column); 
        }
 
        public static int GetColumnGetColumnPreferredWidth(ListView _ListView, ColumnHeader _Column)
        {
            Label _Label = new Label();
            _Label.Font = _ListView.Font;
            _Label.Text = _Column.Text;
 
            int _PreferredWidth = _Label.PreferredWidth;
 
            foreach (ListViewItem _Item in _ListView.Items)
            {
                _Label.Text = _Item.SubItems[_Column.Index].Text;
 
                if (_Label.PreferredWidth > _PreferredWidth)
                    _PreferredWidth = _Label.PreferredWidth;
            }
 
            if (_PreferredWidth == 0)
                return 20;
 
            _PreferredWidth = _PreferredWidth + 10;
 
            if (_Column.Index == 0)
                _PreferredWidth = _PreferredWidth + 10;
 
            return _PreferredWidth;
        }
 
    }
Мне же в программе необходимо заполнять DataTable, чтобы потом из неё обрабатывать данные.
Обычно я использую следующую конструкцию для заполнения данными dgv_Data(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
//Настройки подключения
        public SqlCommand RegionCommand;
        public SqlDataAdapter RegionDataAdapter;
        public SqlCommandBuilder RegionCommandBuilder;
        public DataSet RegionDataSet;
        public DataTable RegionTable;
        public SqlConnection RegionConnect = new SqlConnection();
 
public void Execution_SQL_Script(string SQL_Script)
        {
            if (RegionConnect.State == System.Data.ConnectionState.Open)
            {
                //отправляем и получаем значение в dgv_Data
                dgv_Data.DataSource = GetDataTable(RegionConnect, SQL_Script);
            }
        }
 
#region Выполнение SQL подключения и выполнения скрипта
 
        System.Data.DataTable dt = new System.Data.DataTable();
 
        //Выполнение SQL подключения и выполнения скрипта
        private System.Data.DataTable GetDataTable(SqlConnection conn, string SQLText)
        {
            //создаём новую таблицу, чтобы старых данных не было
            System.Data.DataTable dt = new System.Data.DataTable();
            try
            {
                /////////////////////////Рабочий код до изменений
                SqlDataAdapter RegionDataAdapter = new SqlDataAdapter();
                SqlCommand RegionCommand = new SqlCommand(SQLText, conn);
                RegionDataAdapter.SelectCommand = RegionCommand;
                DataSet RegionDataSet = new DataSet();
                RegionDataAdapter.Fill(dt);
                /////////////////////////Рабочий код до изменений
 
 
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message.ToString());
            };
            return dt;
        }
И вот тут у меня сложности.
Я не понимаю, как из конструкции DBConsole c её DoubleBufferedListView заполнить мой DataTable dt.
Ведь в GetDate у меня конкретно прописываются SqlDataAdapter, SqlCommand, DataAdapter и т.д.
Использовал бы я Oracle, тогда конструкцию бы прописал уже под Oracle.

А тут вопрос больше, как вместо того, чтобы DoubleBufferedListView заполнялся, заполнить System.Data.DataTable dt, но не могу понять.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2017, 19:00
Ответы с готовыми решениями:

Перенести все DataTable из DataSet в одну таблицу Sql Server
Здравствуйте. У меня имеется DataSet, который имеет всегда разное количество DataTable. С помощью...

DataTable из DataSet (по C#)
Как получить переменную DataTable из DataSet (по C#)? (для использования DataView)

datatable and dataset
проблема в том что дататэйбл почему то не заполняеться данными у меня в проекте не зна ютрабла в...

Dataset и DataTable
ребят подскажите как извлечь DataTable из DataSet.

4
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17783 / 13902 / 5324
Регистрация: 17.03.2014
Сообщений: 28,445
Записей в блоге: 1
21.10.2017, 21:48 2
Лучший ответ Сообщение было отмечено JurasskPark как решение

Решение

JurasskPark,
C#
1
2
3
4
5
6
7
8
9
public void ShowData(IDataReader Reader)
{
    DataTable table = new DataTable();
    // Заполнение DataTable данными из Reader
    table.Load(Reader);
    
    // Работа с данными в table
    // ...
}
1
0 / 1 / 1
Регистрация: 31.10.2011
Сообщений: 10
21.10.2017, 22:09  [ТС] 3
OwenGlendower, спасибо большое! Помогло! ))
Сейчас буду мучать, почему первую строку не показывает.
Миниатюры
Универсальная SQL консоль DbConsole и спооб заполнения DataSet и DataTable  
0
0 / 1 / 1
Регистрация: 31.10.2011
Сообщений: 10
21.10.2017, 22:33  [ТС] 4
Нашел причину.
Закомментировал while (Reader.Read())

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Выполнение SQL подключения и выполнения скрипта
        public static System.Data.DataTable GetDataTable(IDataReader Reader)
        {
            //создаём новую таблицу, чтобы старых данных не было
            System.Data.DataTable temp_DataTablе = new System.Data.DataTable();
            try
            {
                //while (Reader.Read())
                //{
                    // Заполнение DataTable данными из Reader
                    temp_DataTablе.Load(Reader);
                //}
            }
            catch
            {
 
            };
            return temp_DataTablе;
        }
P.S. Тему можно закрывать! Огромное спасибо модератору за помощь!
Миниатюры
Универсальная SQL консоль DbConsole и спооб заполнения DataSet и DataTable  
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17783 / 13902 / 5324
Регистрация: 17.03.2014
Сообщений: 28,445
Записей в блоге: 1
21.10.2017, 22:53 5
Цитата Сообщение от JurasskPark Посмотреть сообщение
Нашел причину.
Закомментировал while (Reader.Read())
А зачем ты добавил цикл? В моем примере его не было.
0
21.10.2017, 22:53
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2017, 22:53
Помогаю со студенческими работами здесь

DataSet+DataTable+DataView
как заполнить dataset без датаадаптера данными из datatable, чтоб потом отобразить их через...

Создание и заполнение datatable из dataset
Hellow world! Подскажите пожалуйста, как создать и заполнить DataTable(таблица DataSet) и связать...

Обновление DataTable с использованием LINQ To DataSet
Помогите новичку в области LINQ. Приведите пример применения LINQ To DataSet для обновления...

Объясните работу с DataAdapter, DataSet и DataTable
Доброго времени суток! Столкнулся с такой проблемой: Создаю DataAdapter, в который помещаю...

Вывод содержимого Dataset и Datatable в datagridview
Ситуация такая есть нормально работающий фрагмент кода SqlCommand cmd = new SqlCommand(&quot;select *...

Некорректный перенос данных из Excel в DataSet/DataTable
Доброго времени суток! Проблема в том что импорт данных идет как то не так, и в каждой таблице...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Cisco ASA: подробное руководство по настройке и использованию
hw_wired 25.01.2025
В сетевой безопасности межсетевые экраны играют критически важную роль в защите корпоративных инфраструктур от постоянно растущего числа киберугроз. Среди множества решений для обеспечения. . .
Cisco Intelligent Services Gateway: руководство по настройке
hw_wired 25.01.2025
В сетевых инфраструктурах Cisco Intelligent Services Gateway (ISG) играет ключевую роль в организации и управлении сервисами для конечных пользователей. Этот компонент представляет собой. . .
Использование Go (Golang) в Highload-проектах: преимущества и особенности
bytestream 25.01.2025
В мире высоконагруженных систем выбор правильного инструментария играет ключевую роль в успехе проекта. Go (Golang) представляет собой относительно молодой язык программирования, который быстро. . .
Откуда у float лишние цифры в конце дробной части. Представление чисел с плавающей точкой
bytestream 25.01.2025
При разработке программного обеспечения часто возникает необходимость работать с вещественными числами, которые содержат дробную часть. В современных компьютерных системах такие числа представляются. . .
Как использовать глобальную переменную в функции в Python
bytestream 25.01.2025
В программировании на Python глобальные переменные представляют собой особый тип переменных, которые доступны для использования во всех частях программы, включая различные функции, классы и модули. . . .
Как в цикле обойти все элементы map в Java
bytestream 25.01.2025
В разработке на Java одной из наиболее востребованных структур данных является интерфейс Map, который предоставляет эффективный способ хранения и управления парами "ключ-значение". Разработчики. . .
Для чего нужен UserManager.isU­serAGoat(­) в Android и как это использовать
bytestream 25.01.2025
В мире Android-разработки существует множество интересных и порой загадочных функций, о которых знают далеко не все разработчики. Одной из таких функций является метод UserManager. isUserAGoat(),. . .
Как обойти масси в JavaScript. Всё о циклах
bytestream 25.01.2025
JavaScript представляет собой мощный язык программирования, широко используемый в веб-разработке, где массивы и циклы являются фундаментальными концепциями для эффективной работы с данными. Массив в. . .
Как сделать, чтобы существующая ветка отслеживала удалённую в Git. Связывание локальных и удалённых веток
bytestream 25.01.2025
В разработке программного обеспечения системы контроля версий стали неотъемлемой частью процесса создания качественного программного продукта. Эти инструменты позволяют разработчикам эффективно. . .
Как проверить, что файл НЕ существует с помощью Bash
bytestream 25.01.2025
В системном администрировании проверка существования файлов является фундаментальной операцией, особенно при написании скриптов на Bash. Правильная обработка ситуаций, когда файл отсутствует,. . .
Как проверить, что строка пустая, неопределена или null в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript разработчики регулярно сталкиваются с необходимостью проверки строковых значений на различные состояния. Валидация данных является критически важным. . .
Как проверить существование ключа в объекте или массиве в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript программисты постоянно сталкиваются с необходимостью работать с объектами и массивами. Эти структуры данных являются фундаментальными элементами языка и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru