在ReportExecution2005.asmx SSRS服务上调用Render方法时,snapshotID参数类型不匹配

时间:2014-11-12 19:08:38

标签: sql-server web-services reporting-services

我正在尝试使用带有MSSQL 2012后端的SSRS 2012服务器上的ReportExecution2005.asmx服务端点将报告呈现为PDF。当我在Web服务上调用Render方法时,出现以下错误: 为'snapshotID'提供的参数值与参数类型不匹配。 ---> Microsoft.ReportingServices.Diagnostics.Utilities.ParameterTypeMismatchException:为“snapshotID”提供的参数值与参数类型不匹配。 ---> System.FormatException:String未被识别为有效的DateTime

我尝试呈现的任何报告都出现此错误,snapshotID不是报告中的参数,并且检查报告的配置,它们未设置为缓存或使用快照。我们刚刚从MSSQL 2005迁移到2012,使用带有SSRS和SQL 2005的ReportExecution2005端点我从未看到过这个错误,它工作正常。我已经尝试将snapshotID添加为具有不同值的参数,例如空字符串,当前时间等,但这显然不是它正在寻找的内容。下面是我用来设置和调用服务上的Render方法的代码。在我的情况下,pstrExportFormat将是“PDF”

   Public Function ExportReport(pstrReportPath As String, plstParams As List(Of ReportParameter), pstrExportFormat As String) As Byte()
  Dim lResults() As Byte = Nothing
  Dim lstrSessionId As String
  Dim execInfo As New reporting.ExecutionInfo
  Dim execHeader As New reporting.ExecutionHeader
  Dim lstrHistoryId As String = String.Empty

  Try
     Dim rs As New reporting.ReportExecutionService
     Dim deviceInfo As String = "<DeviceInfo><PageHeight>8.5in</PageHeight><PageWidth>11in</PageWidth><MarginLeft>0.25in</MarginLeft><MarginRight>0.25in</MarginRight><MarginTop>0.25in</MarginTop><MarginBottom>0.25in</MarginBottom></DeviceInfo>"
     rs.Credentials = System.Net.CredentialCache.DefaultCredentials
     Dim params As New List(Of reporting.ParameterValue)
     Dim param As reporting.ParameterValue
     rs.Credentials = System.Net.CredentialCache.DefaultCredentials

     For Each lInputParam In plstParams
        param = New reporting.ParameterValue
        param.Name = lInputParam.Name
        param.Value = lInputParam.Value
        params.Add(param)
     Next

     rs.ExecutionHeaderValue = execHeader
     execInfo = rs.LoadReport(pstrReportPath, lstrHistoryId)
     rs.SetExecutionParameters(params.ToArray, "en-us")

     lResults = rs.Render(pstrExportFormat, deviceInfo, "", "", "", Nothing, Nothing)
  Catch ex As Exception
     Throw
  End Try
  Return lResults

结束功能

一些其他信息,此代码来自VS 2012 Pro中内置的应用程序,并以.NET 2.0框架为目标。我已经尝试定位一个较新的框架,但这给了我一个不同的ReportExecutionService对象,我无法以相同的方式分配凭据,在这种情况下Render方法也不同。

有关变通方法的任何想法,还是以编程方式呈现报告的更好方法?感谢。

1 个答案:

答案 0 :(得分:13)

我今天遇到了同样的问题并且发现在LoadReport方法中,您要确保HistoryID的值为Nothing(C#中为null)。现在,你用一个空字符串传入它 - 将声明更改为

  Dim lstrHistoryId As String = Nothing

或者将方法调用更改为

rs.LoadReport(pstrReportPath, Nothing)