我想使用C#通过SSRS报告Web服务从报告中读取所有参数。但是在读取DateTime参数时遇到问题。 rdl文件中的参数采用英文格式,但在C#中变为美国格式。
修改
我尝试使用下面的代码设置文化,但它仍然不起作用:
//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
有什么想法吗?
答案 0 :(得分:1)
首先,检查报告本身的语言属性。如果这是正确的,请尝试设置C#代码的文化:
Culture="en-GB"
答案 1 :(得分:1)
我必须在生成的ReportingService类旁边创建一个partial类,并覆盖GetWebRequest方法,然后向Web请求添加Accept-Language标头。这是一个示例类:
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;
}
}