Esse problema se aplica ao Microsoft SQL Server 2012 Reporting Services.
Sintomas
Considere o seguinte cenário:
-
Você cria um aplicativo do Windows Forms ou um aplicativo do Windows Presentation Foundation (WPF) baseado no Microsoft .NET Framework 4,0.
-
No aplicativo Windows Forms ou WPF, você usa um controle 2010 do Microsoft Report Viewer para exibir um relatório do Microsoft SQL Server 2012 Reporting Services (SSRS 2012) executado no modo remoto.
-
O relatório inclui um parâmetro de tipo DateTime que tem um valor padrão.
-
Você executa o aplicativo em um sistema operacional com as configurações regionais definidas como italiano. Além disso, o formato de hora completa é definido como "hh: mm: SS".
Nesse cenário, você pode enfrentar um dos seguintes problemas:
-
O valor padrão do parâmetro de tipo DateTime não é exibido na área de prompt de parâmetro.
-
Se você atribuir um valor ao parâmetro do tipo DateTime e atualizar o relatório, o valor será perdido após o relatório ser renderizado e não será exibido.
Causa
Esse problema ocorre devido a uma alteração no .NET Framework 4,0 que impede que o aplicativo e o SSRS 2012 usem as informações corretas com base nas configurações regionais do sistema operacional. Os aplicativos baseados no .NET Framework 4,0 usam configurações regionais que são retornadas pelo Windows. No entanto, o SSRS 2012 foi criado no .NET Framework 3,5 Service Pack 1 (SP1). Portanto, o SSRS 2012 usa as configurações regionais incorporadas no .NET Framework 3,5 SP1. Quando um servidor SSRS 2012 executa um relatório usando o símbolo "." como um separador de tempo, o parâmetro do tipo DateTime é enviado de volta para o cliente como uma cadeia de caracteres. O controle de visualizador de relatórios chama o método DateTimeOffset. TryParse para validar a cadeia de caracteres usando o símbolo ":" como o separador de tempo. Portanto, a cadeia de caracteres é validada como falsa e não é exibida na área do prompt de parâmetro.ObservaçãoEsse problema ocorre apenas se o formato de hora por extenso estiver definido como "hh: mm: SS", a configuração padrão para as configurações regionais de italiano. A configuração padrão para as configurações regionais de italiano depende do sistema operacional. Além disso, você pode definir a configuração padrão do seu sistema operacional alterando o formato de hora completa .
Resolução
Informações sobre a atualização cumulativa
Atualização cumulativa 2 para SQL Server 2012 Service Pack 1 (SP1)
A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 2. Para obter mais informações sobre como obter este pacote de atualização cumulativa do SQL Server 2012 Service Pack 1, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:
2790947 Pacote de atualizações cumulativas 2 para SQL Server 2012 Service Pack 1Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2012 Service Pack 1 Fix. Recomendamos que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:
2772858 As compilações do SQL Server 2012 lançadas após o lançamento do SQL Server 2012 Service Pack 1
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Solução alternativa
Para contornar o problema, use uma das seguintes soluções:
-
Defina as configurações regionais no aplicativo e o sistema operacional para corresponder às configurações regionais que estão localizadas no cliente.
-
Crie um campo de entrada de cadeia de caracteres para o usuário preencher com texto. Em seguida, no relatório, converta a cadeia de caracteres em uma data.
-
Crie um parâmetro oculto ou nenhum prompt que seja preenchido do campo de entrada de cadeia de caracteres quando você executar o relatório.
-
Crie um parâmetro do tipo DateTime não visível e um controle DateTimePicker fora do controle do Visualizador de relatórios. Clique em Exibir relatórioe coloque o valor da cadeia de caracteres no parâmetro do tipo DateTime no manipulador de eventos SubmittingParameterValues .
Informações adicionais
O pacote redistribuível do Microsoft Report Viewer 2010 SP1 está disponível para download no seguinte website do centro de download da Microsoft:
Pacote redistribuível do Microsoft Report Viewer 2010 SP1Para saber mais sobre o método DateTimeOffset. TryParseExact e o método DateTimeOffset. TryParse , acesse os seguintes websites MSDN:
Método DateTimeOffset. TryParseExact (cadeia de caracteres, Cadeia de caracteres, IFormatProvider, DateTimeStyles, DateTimeOffset%) Método DateTimeOffset. TryParse (cadeia de caracteres; DateTimeOffset%)