KB2715841 - 修正:當您在 SSRS 2012 中執行報表時,報表檢視器 2010 不會顯示 DateTime 參數

這個問題也適用於 Microsoft SQL Server 2012 Reporting Services。

症狀

請考慮以下案例:

  • 建立以 Microsoft .NET Framework 4.0 為基礎的 Windows Forms 應用程式或Windows Presentation Foundation (WPF) 應用程式。
  • 在 Windows Forms 或 WPF 應用程式中,您可以使用 Microsoft Report Viewer 2010 控制項來顯示以遠端模式執行的 Microsoft SQL Server 2012 Reporting Services (SSRS 2012) 報告。
  • 報表包含具有預設值的 DateTime 類型參數。
  • 您在地區設定設為義大利文的作業系統上執行應用程式。 此外,[完整時間] 格式設定為 “HH:mm:ss”。

在此情境中,您可能會遇到下列其中一個問題:

  • [日期時間] 類型參數的預設值不會顯示在參數提示區域中。
  • 如果您將值指派給 DateTime 類型參數並更新報表,則該值會在報表轉譯後遺失,且不會顯示。

      

原因

發生此問題的原因是 .NET Framework 4.0 中的變更阻止應用程式和 SSRS 2012 根據作業系統的區域設定使用正確的資訊。 以 .NET Framework 4.0 為基礎的應用程式會使用 Windows 傳回的地區設定。 不過,SSRS 2012 是以 .NET Framework 3.5 Services Pack 1 (SP1) 為基礎所建置。 因此,SSRS 2012 會使用內嵌於 .NET Framework 3.5 SP1 中的地區設定。

當 SSRS 2012 伺服器使用「.」符號做為時間分隔符號執行報告時,DateTime 類型參數會以字串的方式傳回用戶端。 報表檢視器控制項會呼叫 DateTimeOffset.TryParse 方法,以使用 “:” 符號做為時間分隔符號來驗證字串。 因此,字串會驗證為 false,且不會顯示在參數提示區域中。

注意:只有在完整時間格式設定為義大利地區設定的預設設定 「HH:mm:ss」時,才會發生此問題。 義大利地區設定的預設設定取決於您的作業系統。 此外,您可以透過變更 [完整時間] 格式來設定作業系統的預設設定。

解決方式

累積更新資訊

SQL Server 2012 Service Pack 1 (SP1 的累積更新 2)

                
此問題的修正程式最初在累積更新 2 中發行。 如需有關如何取得 SQL Server 2012 Service Pack 1 累積更新套件的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

2790947 SQL Server 2012 Service Pack 1 累積更新套件 2 注意:由於這些組建是累積的,因此每個新發行的修正程式都包含先前的 SQL Server 2012 Service Pack 1 修正程式版本中包含的所有 Hotfix 和所有安全性修正程式。 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2772858 在 SQL Server 2012 Service Pack 1 發行之後所發行的 SQL Server 2012 組建 (英文)

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

因應措施

若要解決此問題, 請使用下列其中一種因應措施:

  • 設定應用程式與作業系統上的地區設定,以符合用戶端上的地區設定。
  • 建立字串輸入欄位,讓使用者填入文字。 然後在報表中,將字串轉換成日期。
  • 建立當您執行報表時從字串輸入欄位填入的隱藏參數或無提示參數。
  • 建立不可見的 DateTime 類型參數,以及在報表檢視器控制項之外的 DateTimePicker 控制項。 按一下 [檢視報表],然後將字串值放入 SubmittingParameterValues 事件處理常式的 DateTime 類型參數中。

      

更多資訊

可從下列 Microsoft 下載中心網站下載 Microsoft Report Viewer 2010 SP1 可轉散發套件:

Microsoft Report Viewer 2010 SP1 可轉散發套件 若要深入了解 DateTimeOffset.TryParseExact 方法和 DateTimeOffset.TryParse 方法,請造訪下列 MSDN 網站:

DateTimeOffset.TryParseExact 方法 (String, String, IFormatProvider, DateTimeStyles, DateTimeOffset%)
        
         DateTimeOffset.TryParse 方法 (字串, DateTimeOffset%)