代码之家  ›  专栏  ›  技术社区  ›  Dustin Brooks

Reporting Services不断删除我的数据集参数

  •  0
  • Dustin Brooks  · 技术社区  · 16 年前





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



    如果有的话,studio至少应该能够预先填充服务要求的参数。 叹气 我的压力球在哪里。。。

    <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 回复  |  直到 9 年前
        1
  •  1
  •   Dustin Brooks    15 年前

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

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

    Guid passedGuid = new Guid(sessionID);
    

    reporting services数据集不喜欢。一位Microsoft支持升级工程师正在与我合作,以验证到底发生了什么,以及是否存在修复,是否将要修复,等等。。。我将为我的代码做一个变通,它不需要向SecurityTicket传递GUID。

    编辑-解决方案


    为了轻松克服这个问题,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);
        }
    
        2
  •  0
  •   Pulsehead    16 年前