Reporting Services会一直删除我的数据集参数

时间:2009-01-15 14:23:13

标签: web-services reporting-services parameters

我正在使用网络服务,每次我更改数据集上的内容时,它都会删除我的所有参数。

奇怪的是,我可以从数据选项卡执行Web服务调用,它会提示我输入所有参数,但如果我单击编辑数据列表为空,或者如果我尝试预览报表,它会爆炸,因为参数是失踪。

只是想知道是否有其他人经历过这种情况以及是否有办法防止这种行为。

这是数据集的副本,而不是我认为重要。这必须是最烦人的错误(如果它是一个bug)。如果没有删除我的参数列表,我甚至无法从设计器执行数据集。当您有大约10个参数并且您正在对新报表进行各种更改时,不断重复键入相同的列表变得非常繁琐。

如果有的话,工作室至少应该能够预先填写服务要求的参数。 叹息我的压力球......

<Query>
   <Method Namespace="http://www.example.com/" Name="TWRPerformanceSummary"/>
   <SoapAction>http://www.example.com/TWRPerformanceSummary</SoapAction>   
       <ElementPath IgnoreNamespaces="true">
            TWRPerformanceSummaryResponse/TWRPerformanceSummaryResult/diffgram/NewDataSet/table{StockPerc,RiskBudget,Custodian,ProductName,StartValue(decimal),EndValue(decimal),CostBasis(decimal)}
       </ElementPath>
</Query>

2 个答案:

答案 0 :(得分:1)

问题来自Web服务内部。我将sessionID(它的GUID)作为字符串传递给报表,然后从报表传递给Web服务。在Web服务中,我接受该字符串并将其转换回Guid并将其传递给我们的SecurityTicket对象。

这就是问题发生的地方。显然这个电话:

Guid passedGuid = new Guid(sessionID);

报告服务数据集不受欢迎。 Microsoft支持升级工程师正在与我合作验证究竟发生了什么,是否有修复,将要修复等等......我将为我的代码安排一个工作,这不需要要传递给SecurityTicket的GUID。

修改 - 解决方案
实质上,每次在数据选项卡上进行更改时,它都会触发对发送空参数的Web服务数据集的调用。如果您的Web服务无法处理空参数,则会错误地删除所有参数。

为了轻松解决这个问题,我们的Web服务中的第一行检查空参数并设置一些默认值。然后,如果返回的数据集为空,我们添加一个虚拟行:

private static void addDummyRow(DataTable dt) {
        var row = dt.NewRow();

        for (int i = 0; i < dt.Columns.Count; i++) {
            if (dt.Columns[i].DataType == typeof(string)) {
                row[i] = dt.Columns[i].ColumnName;
            }
            else if (dt.Columns[i].DataType == typeof(DateTime)) {
                row[i] = new DateTime(1900, 1, 1);
            }
            else {
                row[i] = 0;
            }
        }

        dt.Rows.Add(row);
    }

答案 1 :(得分:0)

我明白这一点,这很烦人。如果您是从VS开发的,只需单击“刷新字段”按钮,它通常会清除问题。如果查询STILL抛出错误,你的SQL很可能有一个错误(至少根据我的经验,如果“刷新字段”不起作用,我做了一些愚蠢的语法错误,如“SELECT Field1 Field2 ...”或者其他什么像那样)。您也可以单击“运行查询”按钮。