0

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

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

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

这是数据集的副本,我认为这并不重要。这必须是有史以来最烦人的错误(如果它是错误的话)。如果不删除我的参数列表,我什至无法从设计器执行数据集。当您有大约 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>
4

2 回答 2

1

问题来自网络服务内部。我将 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);
    }
于 2009-01-27T16:12:16.757 回答
0

我明白了,这很烦人。如果您是从 VS 开发的,只需单击 Refresh fields 按钮,通常就可以解决问题。如果查询仍然抛出错误,则您的 SQL 很可能有错误(至少根据我的经验,如果“刷新字段”不起作用,我犯了一些愚蠢的语法错误,例如“SELECT Field1 Field2 ...”或其他东西像那样)。您也可以单击“运行查询”按钮。

于 2009-01-26T19:20:30.513 回答