这就是我所知道的:
我能找到的最接近的东西是创建外部程序集或dll以使其工作的参考。此链接Eric Charran's blog表示可以完成,但不会发布任何代码。如果有人可以给我这个方法的代码,我可能会跛行去复制一个.net程序集,但是我从来没有创建过一个并且对VB知识非常有限而且没有C#知识。我只是从SSRS中引用了一个dll。
根据搜索此解决方案的人数,任何编写此外部程序集的人都会帮助很多人!我知道我会非常感激。
提前感谢您的关注。
答案 0 :(得分:1)
这是我在同事和同事的帮助下所能做到的。效果很好。
创建此表以保存dll所需的数据。
CREATE TABLE [dbo].[tbl_TOC](
[RID] [int] IDENTITY(1,1) NOT NULL,
[TOCExecutionID] [varchar](50) NULL,
[AssessmentID] [int] NULL,
[ReportName] [varchar](50) NULL,
[GlobalsTotalPages] [int] NULL,
[LoadDate] [datetime] NULL DEFAULT (getdate())
) ON [PRIMARY]
创建此存储过程以添加必要的数据。我们从运行报告的界面发送了一个唯一的ID。我们还使用了我们报告中唯一的另一个参数(AssessmentID)。
create proc rpt_dsTOC
@TOCExecutionID varchar(50)
as
if OBJECT_ID('tempdb..#temp') is not null drop table #temp
create table #temp (
ord int NOT NULL,
ReportName varchar(50) NULL,
PageCnt int NULL,
PageNo int null )
;with ctePageCount as (
select distinct t.ReportName
, t.GlobalsTotalPages PageCnt
, t.TOCExecutionID
, t.AssessmentID
from tbl_TOC t
where TOCExecutionID=@TOCExecutionID
)
insert into #temp
select case when ReportName like 'Plan%' then 1 --List all of the names of the subreports here
when ReportName like 'Busin%' then 2
when ReportName like 'Threa%' then 3
when ReportName like '%Manag%' then 4
when ReportName like '%Monit%' then 5
when ReportName like 'Pande%' then 6
when ReportName like 'Emerg%' then 7
when ReportName like 'Key%' then 8
when Reportname like 'Netw%' then 9
else 10 end ord
, ReportName
, PageCnt
, 0 PageNo
from ctePageCount
--This section calculates the pagenumber by using the total number of pages in each section
declare @run int = 3
declare @ord int, @ReportName varchar(50), @PageCnt int, @PageNo int
declare c cursor for
select ord
, ReportName
, PageCnt
, PageNo
from #temp
order by ord;
open c
fetch next from c into @ord, @ReportName, @PageCnt, @PageNo
update #temp set PageNo=@run
set @run = @run + @PageCnt--5
while @@FETCH_STATUS = 0 --EOF
begin
fetch next from c into @ord, @ReportName, @PageCnt, @PageNo
if @PageNo=0
set @PageNo = @run
update #temp set PageNo=@PageNo where ord=@ord
set @run = @PageNo + @PageCnt
end
close c
deallocate c
select * from #temp order by ord
该存储过程成为主报告中TOC的数据集。
创建dll ReportTOC.ClassTOC:
using System;
using System.Data;
using System.Data.SqlClient;
namespace ReportTOC
{
public class ClassTOC
{
public static string logReportAttributes(string TOCExecutionID, int AssessmentID, string ReportName, int GlobalsTotalPages)
{
string retValue = String.Empty;
try
{
// long TOCExecutionID = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmss"));
using (var conn = new SqlConnection("Server=10.2.36.11;Database=InternalApps;User Id=webclient;Password=webclient;MultipleActiveResultSets=true"))
using (var command = new SqlCommand("usp_LogReportAttributes", conn) { CommandType = CommandType.StoredProcedure })
{
conn.Open();
command.Parameters.AddWithValue("@TOCExecutionID", TOCExecutionID);
command.Parameters.AddWithValue("@AssessmentID", AssessmentID);
command.Parameters.AddWithValue("@ReportName", ReportName);
command.Parameters.AddWithValue("@GlobalsTotalPages", GlobalsTotalPages);
command.ExecuteNonQuery();
}
retValue = "Sent Successfully";
}
catch (Exception ex)
{
retValue = string.Format("{0} \n\r {1}", ex.Message != null ? ex.Message : "", ex.InnerException != null ? ex.InnerException.Message : "");
}
return retValue;
}
}
}
我们使用的是.NET Framework 3.5