Страница 1 из 1

Как сделать поддержку множественного результата ХП

Добавлено: 18 апр 2013, 12:09
levkin77
Предыстория....
1.Стандартно при использовании в качестве источника данных на основе SQL соединения делается несколько запросов: DataSourceMain, DataSourceSecondary и так далее... - необходимо получить несколько наборов данных для формирования отчета.
2.Используя хранимую процедуру можно получить все результаты за один раз (что является намного более правильным и корректным )
3.Да стандартно отчеты не поддерживают множественные результаты - делаем отчеты в дизайнере и подсовываем результат выполнения ХП:
report.RegData("Document", doc.PrintHeader);
report.RegData("DocumentDetail", doc.PrintData);
- код получения и чтения данных из ХП находиться непосредственно в приложении - что при большом количестве отчетов усложняет общую работу, для построения отчетов приходится применять не универсальные механизмы работы с отчетной системой, а персонализированное получение и построение отчетов.

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

Понимаю, что вопрос выглядит несколько непонятным, но в идеале хотелось бы отказаться от стороннего использования кода в приложении, а перенести сам метод в отчет, т.е. в идеале что-то вроде:
1. Передаем в отчет данные о соединении - (это есть)
2. В самом отчете у нас имеется дополнительный метод, который выполняет указанную в нем ХП возвращающую несколько результатов и подсовывающий их в данные отчета

Re: Как сделать поддержку множественного результата ХП

Добавлено: 18 апр 2013, 16:13
Aleksey
Здравствуйте,

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

Код: Выделить всё

using (SqlConnection connection = new SqlConnection(@"Data Source=ALEKSEYPC\SE2012;Initial Catalog=Northwind;Integrated Security=True"))
{
    SqlCommand command = new SqlCommand();
    command.Connection = connection;
    command.CommandText = "Pr01";
    command.CommandType = CommandType.StoredProcedure;

    SqlDataAdapter storedProc = new SqlDataAdapter(command);
    DataSet ds = new DataSet();
    
    storedProc.Fill(ds);
    // в отчете будут зарегестрированы все наборы данных, возвращаемые хранимой процедурой
    report.RegData(ds);
}
Спасибо.

Re: Как сделать поддержку множественного результата ХП

Добавлено: 18 апр 2013, 20:00
levkin77
На данный момент поддержка множественности наборов данных из ХП не поддерживается ни одним из известных мне продуктов для отчетов на уровне самой отчетной системы...Это печально. Приведенный Вами пример - как раз и является единственным способом получения/подключения данных в отчет с использованием ХП возвращающий множественные результаты.

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

P.S. А можно ли получать данные непосредственно в событиях отчета? Например в Report.BeginRender...

Re: Как сделать поддержку множественного результата ХП

Добавлено: 19 апр 2013, 14:37
Aleksey
Здравствуйте,

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

Спасибо.

Re: Как сделать поддержку множественного результата ХП

Добавлено: 19 апр 2013, 18:52
levkin77
Aleksey писал(а): К сожалению, но это никак не получится сделать.
Для дизайна отчета вам необходима информация о названиях источников данных и их колонок.
- это относится к возможности (невозможности) использования Report.BeginRender?

Re: Как сделать поддержку множественного результата ХП

Добавлено: 22 апр 2013, 16:35
Aleksey
Здравствуйте,

Да, к этому тоже.

Спасибо.