Reporting services SSRS reporting web服务中报表参数的日期时间格式问题,而不是报表查看器控件

Reporting services SSRS reporting web服务中报表参数的日期时间格式问题,而不是报表查看器控件,reporting-services,ssrs-2008,Reporting Services,Ssrs 2008,我想使用C#通过SSRS报告web服务从报告中读取所有参数。但是我在读取DateTime参数时遇到了一个问题。rdl文件中的参数是英国格式,但在C#中变为美国格式 编辑: 我尝试使用下面的代码设置区域性,但仍然不起作用: //set it before instantiating ReportingService2010 instance. Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); Thread.C

我想使用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)。但是,当通过reporting web service读取相同的参数时,samevalue采用另一种格式(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()); 
      }


有什么想法吗?

首先,检查报表本身的语言属性。如果这是正确的,请尝试设置C代码的区域性:


我必须在生成的ReportingService类旁边创建一个分部类,并重写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;
    }

}

绝对值得一看。我总是被VisualStudio默认使用US语言编写新报告的方式所困扰,不管它安装在什么环境中。@PaulStock谢谢您的建议,将区域性设置为“en GB”不起作用。请参阅我更新的评论。使用reportExecutionService,如源代码:
reportExecutionService.SetExecutionParameters(parametersList.ToArray(),parameterLanguage)
和parameterLanguage是
System.Globalization.CultureInfo.CurrentCulture.Name
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;
    }

}