将SSRS报告中的总页数插入数据库

时间:2017-07-13 13:21:32

标签: c# sql-server vb.net reporting-services

我有一个要求,我需要能够在生成SSRS报告后将SSRS报告中的页面总数插入数据库,这是动态的。该报告也由服务自动运行,该服务创建并将其存储为pdf,因此没有用户与报告交互。

我觉得这在某种程度上是可行的,因为SSRS能够在运行报告时插入数据。但这种情况有点不同。原因是您无法在生成报告之前获取报告页面的数量,以便将其提供给您的数据集中插入的程序。

所以我尝试了一些事情:

尝试#1

我创建了一个包含2个矩形和一个子报告的报告。两个矩形之后都会进行分页。子报告包含一个名为

的参数
PageAmount

然后我将此代码添加到第一个报告的代码属性

Function TotalPages() As String   
    Return Me.Report.Globals!TotalPages    
End Function

返回报告中的总页数,以便在报告正文中使用。

然后我将它作为参数传递给子报告,如此

Code.TotalPages()

子报告在数据库中执行了插入操作,但结果始终为 1 。无论有多少页面都会是1.

尝试#2

由于您可以将自定义程序集导入SSRS以在代码中使用它,我想我会尝试使用c#代码进行插入。所以我编写了一个程序,它执行插入,测试并且工作正常。然后,我构建了自定义程序集并将其导入到报告文件中。进行插入的方法的代码是沿着这些方向的(我知道代码可以在很多方面得到改进,但这只是用于测试):

namespace MyNamespace
{
    public class myClass
    {
        public static string InsertPageNumberDB(int id, string returnValue)
        {
            try
            {        
                string connection = "Data Source = Server; Initial Catalog = Database; User ID = Username; Password = Password";

                using(SqlConnection conn = new SqlConnection(connection))
                {
                    conn.open();

                    SqlCommand cmd = new SqlCommand("INSERT INTO TABLE VALUES(" + id.ToString() + ", " + returnValue + ")", conn);
                    cmd.ExecuteNonQuery();
                }
            }
            catch(Exception ex)
            {
                return ex.ToString();
            }

            return returnValue;
        }
    }
}

导入后,我能够在报表的页脚中的表达式中使用它,如下所示:

Code.MyClass.InsertPageNumberDB(1, Globals!TotalPages.ToString())

因此,这将显示页码并将其插入表中。它没有用,而是返回了一个例外:

[SecurityException: Request for the permission of type 
'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=################' failed.]

从SSRS运行时,似乎无法验证尝试连接到数据库的用户的异常。

编辑:进一步调查后,连接请求无法到达数据库。它在尝试连接之前失败了。它可以来自System.Data.SqlClient dll吗?

所以我的问题是:有没有办法在表格中插入报告生成后的页面数量?如果没有,是否有办法以编程方式计算pdf文件中的页数?

感谢任何帮助。

干杯,

0 个答案:

没有答案