Я хочу использовать C # для чтения всех параметров из отчета через веб-службу отчетов SSRS. Но у меня проблема при чтении параметра DateTime. Параметр в файле rdl представлен в британском формате, но он становится американским форматом в C #.
Edit:
Я попытался установить культуру с помощью приведенного ниже кода, но он по-прежнему НЕ работает:
//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)));
Формат даты правильный, когда используется элемент управления просмотра отчетов . Когда параметр считывается через элемент управления средства просмотра отчетов, значение даты уже является правильным (дд / мм / гггг). Однако, когда тот же параметр считывается через веб-службу отчетов, это же значение имеет другой формат (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 Метод
Доступ к SOAP API
Есть идеи?