2009-01-15 44 views
0

我正在使用Web服务,每当我更改数据集上的某些内容时,它将删除我的所有参数。

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

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

这是数据集的副本,不是我认为它很重要。这必须是最烦人的bug(如果它是一个bug)。如果不删除我的参数列表,我甚至不能执行设计者的数据集。如果您有大约10个参数,并且您正在对新报告进行各种更改,则不断重复输入相同的列表会变得非常繁琐。

如果有的话,工作室应该至少能够预先填充服务所要求的参数。 感叹哪来我的压力球...Reporting Services一直在删除我的数据集参数

<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> 
+0

我已经看到这种情况发生过但不幸的是我不知道是什么原因呢:-( – PhilPursglove 2009-01-16 10:56:26

+0

我想我会打电话给微软今天晚些时候支持,希望他们能帮助我,我会在这里发布我的结果 – 2009-01-20 15:00:33

回答

1

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

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

Guid passedGuid = new Guid(sessionID); 

是不喜欢的报告服务数据集。微软支持升级工程师正在与我一起验证究竟发生了什么,如果有修复程序,将成为修复程序等......我将为我的代码添加工作,但不需要要传递给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); 
    } 
0

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

相关问题