logo
small logo
  • Продукты
  • Купить
  • Поддержка
  • Статьи
  • Забыли пароль?
    • en
    • ru
    • pt
    • es
    • JP
    • ZH
  • Главная
  • /
  • Статьи
  • /
  • Как использовать хранимые процедуры с несколькими наборами данных в результате
  • Как использовать динамические запросы в FastReport.Net

    14 августа 2018 г.

    Большинство пользователей FastReport.Net строят отчеты получая данные из SQL СУБД, и хотели бы пользоваться преимуществами

    Подробнее
  • Как подключиться к базе данных Sybase SQL Anywhere

    29 февраля 2020 г.

    СУБД Sybase SQL Anywhere обладает рядом очень полезных качеств, которые делают ее весьма конкурентной в

    Подробнее
  • Как использовать SQL запросы при создании внутреннего источника данных отчета в дизайнере отчетов FastReport.Net

    2 сентября 2019 г.

    При создании подключения к SQL СУБД вы можете задать запрос, чтобы выбрать отфильтрованные или комбинированные

    Подробнее
  • Как сделать простой Web-отчет FastReport.Net

    4 октября 2016 г.

    Сегодня Web-отчеты очень востребованы. Каждый день мы пользуемся интернетом и просматриваем десятки, а то и

    Подробнее
  • Как создать Master-Detail отчет из несвязанных таблиц

    27 марта 2017 г.

    Нередко появляется необходимость в создании отчета типа «Главный – Подчиненный» или «Master – Detail». Это

    Подробнее

Как использовать хранимые процедуры с несколькими наборами данных в результате

8 мая 2020 г.

Часто, при создании отчетов, нам приходится иметь дело с базами данных, далекими от идеала. Различные «особеннсти», порой, вводят в ступор. Как, например, построить отчет на основе нескольких наборов данных, которые возникает хранимая процедура MS SQL? При создании источника данных внутри отчета, мы можем использовать хранимую процедуру в sql запросе, но только для конкретной таблицы. А это означает, что будет взят только первый набор данных, возвращаемый хранимой процедурой. Чтобы сгенерировать несколько таблиц из результатов работы хранимой процедуры, нам нужно создавать источник данных программно, в коде пользовательского приложения.

Необходимо создать подключение к базе данных, выполнить хранимую процедуру, а результаты ее работы поместить в DataSet. Затем, DataSet передаем в отчет и регистрируем в нем источник данных. Таким образом, в дизайнере, при создании отчета мы получим подготовленный источник данных. Можно пойти дальше, и программно подключить этот источник к отчету так, что он уже будет в дереве данных. Но сначала рассмотрим первый вариант с простым добавлением источника данных в отчет.

Допустим у вас есть некоторое WinForms приложение, из которого вы формируете отчеты. Добавим кнопку для вызова редактора отчетов:

1
2
3
4
5
6
7
8
private void button1_Click(object sender, EventArgs e)
 {
 Report FReport = new Report();
 SqlConnection conn = new SqlConnection("Data Source=localhost;AttachDbFilename=;Initial Catalog=salesdb;Integrated Security=True;Persist Security Info=False;User ID=;Password=");
 DataSet data = GetDataSet(conn, "Test");
 FReport.RegisterData(data, "NorthWind");
 FReport.Design();
 }

Здесь, мы создали объект отчета, объявили строку подключения к базе данных MS SQL, создали источник данных для отчета и зарегистрировали его в отчете. Метод получения источника данных GetDataSet реализуем ниже:

1
2
3
4
5
6
7
8
9
10
11
public DataSet GetDataSet(SqlConnection connection, string storedProcName, params SqlParameter[] params)
 {
 var command = new SqlCommand(storedProcName, connection) { CommandType = CommandType.StoredProcedure };
 command.Parameters.AddRange(params);
 
 var result = new DataSet();
 var dataAdapter = new SqlDataAdapter(command);
 dataAdapter.Fill(result);
 
 return result;
 }

Этот метод принимает на вход строку подключения, имя хранимой процедуры и возможные параметры для хранимой процедуры. В нашем случае мы не передали ничего. После создания подключения к базе данных выполняется хранимая процедура. Результаты ее работы помещаются в dataAdapter.

На этом можно было бы закончить статью. Приведенного кода достаточно, чтобы создать и зарегистрировать источник данных в отчете, который будет доступен вам в дизайнере, при редактировании созданного в начале объекта отчета.

Когда дизайнер отчетов будет открыт, вы увидите пустой шаблон отчета. Источники данных нужно будет выбрать в настройках:

 

Однако, мы можем усовершенствовать код и избежать дополнительных действий по выбору источников данных в дизайнере. То есть отчет будет создан с сразу добавленными данными. Для этого доработаем обработчик нажатия кнопки:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void button1_Click(object sender, EventArgs e)
 {
 Report FReport = new Report();
 Config.DesignerSettings.DesignerLoaded += DesignerSettings_DesignerLoaded;
 SqlConnection conn = new SqlConnection("Data Source=localhost;AttachDbFilename=;Initial Catalog=salesdb;Integrated Security=True;Persist Security Info=False;User ID=;Password=");
 DataSet data = GetDataSet(conn, "Test");
 
 FReport.RegisterData(data, "NorthWind");
 // activate all data sources by default
 foreach (DataSourceBase source in FReport.Dictionary.DataSources)
 {
 source.Enabled = true;
 }
 FReport.Design();
 }

Как вы заметили, мы подписали обработчик на событие загрузки дизайнера. Далее, мы в цикле включаем все источники данных в отчете. Реализуем обработчик для события загрузки дизайнера:

1
2
3
4
 private void DesignerSettings_DesignerLoaded(object sender, EventArgs e)
 {
 (sender as Designer).cmdNew.CustomAction += new EventHandler(cmdNew_CustomAction);
 }

Пробрасываем событие с указателем на дизайнер отчетов. Обработчик события:

1
2
3
4
5
6
7
8
9
10
 void cmdNew_CustomAction(object sender, EventArgs e)
 {
 Designer designer = sender as Designer;
 
 //StandardReportWizard wizard = new StandardReportWizard(); // you can use any wizard form package
 BlankReportWizard wizard = new BlankReportWizard();
 wizard.Run(designer);
 
 designer.SetModified(this, "EditData");
 }

Создаем мастер создания пустого отчета. В итоге, при редактировании пустого отчета, мы получаем добавленные данные:

 

О продукте Скачать Купить
avatar
Dmitriy Fedyashov
Руководитель отдела обеспечения качества
.NET FastReport SQL Stored procedures

Добавить комментарий
logo
  • +7(800)551-75-80
  • info@fastreport.ru
  • Ростов-на-Дону, Россия, 344082, ул.Обороны 24, офис 311
  • Купить
  • Загрузить
  • Документация
  • Отзывы
  • Как деинсталировать
  • Онлайн поддержка
  • FAQ
  • Видео уроки
  • Форум
  • Статьи
  • Наши Новости
  • Пресса о нас
  • Реселлеры
  • ВУЗам
  • Наша команда
  • Карьера
  • Контакты

© 1998-2021 ООО «Фаст Репортс»

  • Согласие с обработкой персональных данных
  • Не является публичной офертой