Как использовать SQL функции в FastReport .NET

14.08.2018

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

Напомню, табличные функции возвращают таблицы, а скалярные функции возвращают одиночные значения.

Создадим табличную функцию в MS SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
USE [testdb]
GO
 
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================
-- Description: Returns customers who live in the specified city
-- =============================================
 
CREATE FUNCTION [dbo].[GetCustomersFromCity]
(
 @city VARCHAR(20)
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM dbo.CUSTOMER WHERE CITY = @city
)

Функция принимает один параметр – название города, а возвращает список клиентов в этом городе.

Давайте сразу добавим еще одну, теперь скалярную функцию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
USE [testdb]
GO
 
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================
-- Description: Returns last added customer
-- =============================================
CREATE FUNCTION [dbo].[GetLastCustomer]
()
RETURNS VARCHAR(30)
AS
BEGIN
 DECLARE @Name VARCHAR(30)
 SELECT TOP 1 @Name = CONCAT(ind.FIRST_NAME, ' ', ind.LAST_NAME) FROM dbo.Customer cus
 JOIN dbo.Individual ind ON ind.CUST_ID = cus.CUST_ID
 ORDER BY cus.CUST_ID
 RETURN @Name
END

Эта функция не принимает параметров, а возвращает ФИО последнего зарегистрированного клиента.

Теперь перейдем к отчету.

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

 

Добавим подключение к базе данных MS SQL:

 

Далее, на следующем шаге нам предлагается выбрать таблицы, но мы воспользуемся кнопкой Add SQL query…

 

На следующем шаге задаем имя новой таблицы – TableFunction. Нажимаем Next.

 

Функции, в отличие от хранимых процедур используются как таблицы. То есть для получения данных нужно использовать Select.

 

На следующем шаге нам нужно добавить параметр запроса city. В его свойстве Expression выбираем параметр отчета Param. Переходим далее и нажимаем Finish.

И получаем новый источник данных:

 

Теперь добавим диалоговую форму и перетащим на нее параметр отчета – Param.

Перетаскиваем поля из таблицы TableFunction на бэнд Данные.

Запустим отчет. Вводим значение в диалоговой форме:

 

И получаем выборку из табличной функции:

Вы не забыли, в начале статьи мы создали две функции? Этот пример еще проще, потому что я не добавил входящий параметр в эту функцию. Создадим еще один источник данных. Также, как и в первый раз – подключение к MS SQL. И опять нажимаем кнопку Add SQL query…

Вызов скалярной функции немного отличается от вызова табличной функции:

Пропускаем все остальные шаги.

 

Добавим еще одну страницу отчета и перетаскиваем на бэнд данные единственное поле из нового источника данных – ScalarFunc.

Запустим отчет. Переходим на вторую страницу:

 

Как видите, использовать функции, для получения данных очень просто, и они помогут вам сэкономить время при разработке отчета и его выполнении.

.NET .NET FastReport FastReport SQL SQL
8 апреля 2025

Как настроить подключение к Apache Ignite в FastReport .NET

В этой статье мы рассмотрим, как настроить подключение к Apache Ignite в FastReport .NET. Вы узнаете, какие шаги необходимо выполнить для подключения плагина через код и дизайнер отчетов.
8 апреля 2025

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx)

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx): описание и инструкция по использованию инструмента.
25 марта 2025

Как объединить несколько отчетов в один из FastReport .NET

FastReport .NET — это мощный инструмент для создания и управления отчётами. В данной статье мы рассмотрим, как объединить несколько отчётов в один в FastReport .NET.