2011-08-19 55 views
0

我想使用C#通過SSRS報告Web服務從報告中讀取所有參數。但是在閱讀DateTime參數時遇到問題。 rdl文件中的參數是英式格式,但它在C#中成爲美式格式。報告參數上的DateTime格式問題,在SSRS報告Web服務中,而不是報告查看器控件

編輯:

我嘗試用下面的代碼設置的文化,但它仍然不能正常工作:

//set it before instantiating ReportingService2010 instance. 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB"); 

//set it when reading a date type value 
    Console.WriteLine("{0} {1} {2}", dateTime.Year, dateTime.Month, dateTime.Day); 
    Console.WriteLine(dateTime.ToString("yyyy-MM-dd")); 
Console.WriteLine(dateTime.ToString("yyyy-MM-dd", new CultureInfo("en-GB", false))); 

日期格式是正確的,當報表查看器控制是用過的。通過報表查看器控件讀取參數時,日期值已經正確(dd/MM/YYYY)。但是,當通過報告Web服務讀取相同的參數時,相同的值是另一種格式(MM/dd/YYYY)。我認爲這是設置文化不起作用的原因。

下面是我的代碼:

ReportingService2010 rs = new ReportingService2010(); 
     rs.Credentials = System.Net.CredentialCache.DefaultCredentials; 

     string report = "/SampleReports/Employee Sales Summary"; 
     bool forRendering = false; 
     string historyID = null; 
     ParameterValue[] values = null; 
     DataSourceCredentials[] credentials = null; 
     ItemParameter[] parameters = null; 

     try 
     { 
     parameters = rs.GetItemParameters(report, historyID, forRendering, values, credentials); 

     if (parameters != null) 
     { 
      foreach (ItemParameter rp in parameters) 
      { 
string value = parameter.DefaultValues.FirstOrDefault(); //it becomes US format here 
       Console.WriteLine("Name: {0}",value); 
      } 
     } 
     } 

     catch (SoapException e) 
     { 
     Console.WriteLine(e.Detail.InnerXml.ToString()); 
     } 

ReportingService2010.GetItemParameters Method

Accessing the SOAP API

任何想法?

+0

未標記答案? – Kiquenet

回答

1

首先,檢查報告中的語言屬性。如果這是正確的,可以嘗試設置你的C#代碼文化:

Culture="en-GB" 
+0

絕對值得一檢查。我總是被Visual Studio默認爲新語言的美國語言,無論它安裝在什麼環境中,都被捕獲。 –

+0

@PaulStock感謝您的建議,將文化設置爲「en-GB」不起作用。請參閱我最新的評論。 – Pingpong

1

我要創建旁邊的產生ReportingService類的部分類並重寫GetWebRequest方法,那麼Accept-Language頭添加到Web請求。這裏是一個樣本類:

public partial class ReportingService 

{ 

protected override System.Net.WebRequest GetWebRequest(Uri uri) 
    { 
     WebRequest request = base.GetWebRequest(uri); 

     request.Headers.Add(HttpRequestHeader.AcceptLanguage, CultureInfo.CurrentCulture.Name); 

     return request; 
    } 

} 
+0

使用*** reportExecutionService ***類似於源代碼:'reportExecutionService.SetExecutionParameters(parametersList.ToArray(),parameterLanguage);'和** parameterLanguage **是'System.Globalization.CultureInfo.CurrentCulture.Name' – Kiquenet

相關問題