Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Just777
0 / 0 / 0
Регистрация: 06.04.2017
Сообщений: 56
1

Передача данных с запроса

16.01.2019, 18:59. Просмотров 2360. Ответов 8
Метки нет (Все метки)

При нажатии на кнопку необходимо, чтобы результат запроса записался в exel файл, и открылся уже готовый файл с результатами.
Что прописать для того, чтобы передать данные???

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
using (SqlConnection connect = new SqlConnection(@"Data Source=NEVER\SQLEXPRESS;Initial Catalog=programm;Integrated Security=true;"))
            {
                connect.Open();
                SqlCommand cmd = new SqlCommand("SELECT student.Familia, student.otchestvo, student.name, " +
                    "name_competence.competence FROM  " +
                    "student INNER JOIN  name_competence ON student.competence " +
                    "= name_competence.id WHERE((name_competence.id) = '8')", connect); //запрос
                SqlDataReader reader = cmd.ExecuteReader();
                
                while (reader.Read())
                {
                Excel.Application excel = new Excel.Application(); // Создаем СОМ- объект Excel //
                excel.Visible = true; // делаем объект видимым //
                excel.SheetsInNewWorkbook = 4; // количество листов  в книге //
                excel.Workbooks.Add(Type.Missing); // добавляем книгу //
                Excel.Workbook workbook = excel.Workbooks[1]; // получаем ссылку на первую открытую книгу  //
                Excel.Worksheet sheet = workbook.Worksheets.get_Item(1); //  получаем ссылку на первый лист //
 
                    //прописываем заголовки столбцов
                sheet.Cells[1, 1] = "Фамилия"; 
                sheet.Cells[1, 2] = "Имя";
                sheet.Cells[1, 3] = "Отчество";
                sheet.Cells[1, 4] = "Компетенция";
                sheet.Cells.get_Range("A1", "В1").Font.Bold = true; // делаем их жирными // 
                }
            }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2019, 18:59
Ответы с готовыми решениями:

Передача запроса пакетом
такая ситуация: клиент шлет серверу запрос к бд (простой строкой с кодом SQL) через подключение...

ADO.NET передача запроса на sql server
Сетевые пакеты запроса передаются на сервер БД по сети друг за другом или параллельно ?

Передача информации SQL запроса в таблицу Excel
Всем привет. Помогите распутаться... Обращаюсь к таблице SQL и получаю результат из более чем...

Скорость запроса данных из БД
Добрый день, помогите пожалуйста разобраться в чем проблема, может кто с таким сталкивался. Есть...

Гибкая фильтрация данных запроса
Требуется сделать фильтр таблицы. Фильтр большой около 15 различных типов полей (string, datetime,...

8
OttoFix
20 / 16 / 5
Регистрация: 11.12.2018
Сообщений: 80
18.01.2019, 06:30 2
Лучший ответ Сообщение было отмечено Just777 как решение

Решение

C#
1
2
3
4
5
while (reader.Read())
                {
                  ....
                  ....
                }
Данная конструкция (цикл), если описать ее простым языком звучит так "Выполнять некие действия, пока некое выражение истинно", в вашем случае это reader.Read() (метод .Read() возвращает истину если есть следующая строка для считывания и переходит на нее).

А теперь давайте посмотрим на Ваш код. У Вас получается, при переходе к следующей строке у вас создается новый объект Excel и его настройка, но нет самого главного, заполнения, а оно должно выглядеть примерно так
C#
1
2
3
4
                sheet.Cells[2, 1] = ["Familia"].ToString(); 
                sheet.Cells[2, 2] = ["name"].ToString();
                sheet.Cells[2, 3] = ["otchestvo"].ToString();
                sheet.Cells[2, 4] = ["competence"].ToString();
1
Just777
0 / 0 / 0
Регистрация: 06.04.2017
Сообщений: 56
18.01.2019, 16:31  [ТС] 3
OttoFix, к сожалению,не работает...
0
Миниатюры
Передача данных с запроса  
pincet
1367 / 951 / 130
Регистрация: 23.07.2010
Сообщений: 5,156
19.01.2019, 11:35 4
Цитата Сообщение от OttoFix Посмотреть сообщение
C#
1
2
3
4
                sheet.Cells[2, 1] = ["Familia"].ToString(); 
                sheet.Cells[2, 2] = ["name"].ToString();
                sheet.Cells[2, 3] = ["otchestvo"].ToString();
                sheet.Cells[2, 4] = ["competence"].ToString();
C#
1
sheet.Cells[2, 2] = reader["name"].ToString();
1
Just777
0 / 0 / 0
Регистрация: 06.04.2017
Сообщений: 56
19.01.2019, 23:05  [ТС] 5
Спасибо большое за помощь!!!)

Добавлено через 8 минут
Результат запроса,это несколько строк. Как сделать так, чтобы весь запрос был на одном листе?
Просто получается так, что каждая новая строка,это новый документ exel.

Добавлено через 24 минуты
попытка сформировать цикл с параметром безуспешная, так как "оператор < невозможно применить к операнду SqlDataReader"
C#
1
2
3
4
5
6
7
8
for (int i =2 ; i < reader; i++)
                    {
                            sheet.Cells[i, 1] = reader["Familia"].ToString();
                            sheet.Cells[i, 2] = reader["name"].ToString();
                            sheet.Cells[i, 3] = reader["otchestvo"].ToString();
                            sheet.Cells[i, 4] = reader["competence"].ToString();
                        i++;
                    }
0
OttoFix
20 / 16 / 5
Регистрация: 11.12.2018
Сообщений: 80
21.01.2019, 06:18 6
Лучший ответ Сообщение было отмечено Just777 как решение

Решение

Цитата Сообщение от pincet Посмотреть сообщение
1
C#
1
sheet.Cells[2, 2] = reader["name"].ToString();
Да, поторопился

Цитата Сообщение от Just777 Посмотреть сообщение
попытка сформировать цикл с параметром безуспешная
Этого делать и не надо, а надо немного подправить Ваш цикл.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(reader.HasRows) {Excel.Application excel = new Excel.Application(); // Создаем СОМ- объект Excel //
                excel.Visible = true; // делаем объект видимым //
                excel.SheetsInNewWorkbook = 4; // количество листов  в книге //
                excel.Workbooks.Add(Type.Missing); // добавляем книгу //
                Excel.Workbook workbook = excel.Workbooks[1]; // получаем ссылку на первую открытую книгу  //
                Excel.Worksheet sheet = workbook.Worksheets.get_Item(1); //  получаем ссылку на первый лист //
 
                    //прописываем заголовки столбцов
                sheet.Cells[1, 1] = "Фамилия"; 
                sheet.Cells[1, 2] = "Имя";
                sheet.Cells[1, 3] = "Отчество";
                sheet.Cells[1, 4] = "Компетенция";
                sheet.Cells.get_Range("A1", "В1").Font.Bold = true; // делаем их жирными // }
while (reader.Read()) {
int i = 2;
                            sheet.Cells[i, 1] = reader["Familia"].ToString();
                            sheet.Cells[i, 2] = reader["name"].ToString();
                            sheet.Cells[i, 3] = reader["otchestvo"].ToString();
                            sheet.Cells[i, 4] = reader["competence"].ToString();
                        i++;
}
Возможно есть опечатки, прекращайте бездумно копировать код
1
Just777
0 / 0 / 0
Регистрация: 06.04.2017
Сообщений: 56
21.01.2019, 21:49  [ТС] 7
OttoFix, Спасибо, только i объявить надо было до цикла while,а иначе он не переходит на новую строку!
0
OttoFix
20 / 16 / 5
Регистрация: 11.12.2018
Сообщений: 80
22.01.2019, 05:59 8
Цитата Сообщение от Just777 Посмотреть сообщение
только i объявить надо было до цикла while,а иначе он не переходит на новую строку
Ну вот, молодец , я синтаксис сильно не смотрел, так в блокноте накидал, еще цикл while должен быть внутри условия if(reader.HasRows).
0
Just777
0 / 0 / 0
Регистрация: 06.04.2017
Сообщений: 56
22.01.2019, 13:04  [ТС] 9
OttoFix, ну,эт я и так поняла)
Цитата Сообщение от OttoFix Посмотреть сообщение
еще цикл while должен быть внутри условия if(reader.HasRows).
0
22.01.2019, 13:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2019, 13:04

Вывод данных запроса из БД в TextBox
Здрасте! Вот таким образом происходит отображение данных запроса в combobox1 public void...

Фильтр данных после запроса на выборку
Начну сначала. Данные загружаются в грид после выбора значения в комбобоксе private void...

Тип данных запроса LINQ в SQL
нужно вместо var использовать тип данных запроса который берет данные из базы данных sql server ...


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

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

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