2009-01-15 38 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 ...」或某事像那樣)。您也可以單擊「運行查詢」按鈕。

相關問題