Saltar al contenido

Excepción de formato de fecha de Oracle en SQL Server Reporting Services

Este grupo de especialistas pasados varios días de trabajo y de recopilar de datos, obtuvieron la solución, nuestro deseo es que te resulte útil para tu trabajo.

Solución:

lo que ha cambiado en SSRS2017 vs SSRS2008R2

SSRS 2008 usó el antiguo Sistema.Datos.OracleClient. En SSRS 2016 y versiones posteriores, debe instalar el proveedor Oracle ODP.NET, creado y respaldado por Oracle. Entonces, probablemente solo haya una diferencia en cómo los dos controladores establecen el parámetro de sesión NLS_DATE_FORMAT.

Puede ver su configuración si agrega un conjunto de datos a su informe con esta consulta:

select parameter, value 
from nls_session_parameters 
where parameter like 'NLS%'
order by parameter

Desafortunadamente, no parece haber una manera de cambiar globalmente el formato de fecha del cliente en Oracle.ManagedDataAccess, por lo que deberá realizar todos los cambios en las consultas del conjunto de datos del informe.

Alternativamente, puede intentar asegurarse de que está pasando parámetros de fecha y no string parámetros Si pasa una fecha a la función to_date() de Oracle, no necesita especificar un formato.

Los documentos para SSRS 2014 “Este tipo de origen de datos integrado se basa en el proveedor administrado de .NET Framework para Oracle y requiere un componente de software de cliente de Oracle”.

Y para SSRS 2016, “este tipo de origen de datos integrado utiliza el proveedor de datos de Oracle directamente y requiere un componente de software de cliente de Oracle”.

Tratando de resolver el problema

No creo que el problema esté relacionado con la actualización de Visual Studio. Está relacionado con el formato de fecha pasado como parámetro a TO_DATE() función.

Basado en la documentación oficial de Oracle/PLSQL: Mensaje de error ORA-01830:

Causa: Intentó ingresar un valor de fecha, pero la fecha ingresada no coincidía con el formato de fecha.

En Oracle, el formato de fecha predeterminado generalmente es DD-LUN-AAAA. Si intenta ingresar un valor de fecha que no cumple con este formato.

Parece que ha pasado los parámetros de fecha en el dd-MMM-yyyy formato y ahora se pasan como MM/dd/yyyy.

En primer lugar, compruebe que la configuración regional o la información cultural de la aplicación no hayan cambiado.


Posibles soluciones

Puede solucionar el problema utilizando varios enfoques:

(1) Manejo del formato de fecha de los parámetros

Si no desea editar todo el código, entonces es más fácil forzar los datos del parámetro string formato, asegúrese de que todos los parámetros pasados ​​a TO_DATE() la función está en el siguiente formato (o intente cambiar el formato de fecha predeterminado desde la configuración regional del sistema operativo):

dd-MMM-yyyy   example: 01-AUG-2019

(2) Agregar el formato de fecha a la función TO_DATE

Si está seguro de que el formato de los parámetros de fecha es fijo y no cambiará, puede editar su código como mencionó en la pregunta:

To_Date(:Date_Parameter,’MM/DD/YYYY’)

(3) Pasar la fecha y el formato como parámetros

Esto también requiere cambiar el código, pero pasará la fecha y el formato como parámetros.

To_Date(:Date_Parameter,:DateFormat_Parameter)
  • Demostración de SQLFiddle para analizar fechas

Puede encontrar otros métodos en el siguiente enlace:

  • ORA-01830: la imagen del formato de fecha finaliza antes de convertir toda la entrada string / Seleccionar suma donde consulta de fecha

Actualización 1: Realización de cambios comunes en varios informes

Mientras buscaba, encontré el siguiente enlace que proporciona un método para recorrer los informes y realizar cambios. Solo tienes que reemplazar To_Date(:Date_Parameter) con To_Date(:Date_Parameter,’MM/DD/YYYY’):

  • SSRS: realice cambios comunes en varios informes con un solo clic

Actualización 2: otras posibles soluciones

Forzar la información cultural editando ReportViewer.aspx

Puedes editar el ReportViewer.aspx El archivo se encuentra en el directorio de servicios de informes de SQL Server y fuerza la información cultural utilizada en los informes. Consulte la siguiente pregunta que le dará más detalles:

  • Quiero el parámetro de fecha y hora en formato DDMMAAAA en el informe ssrs

Cambiar la configuración de idioma del navegador

Revisa el siguiente enlace (lea las respuestas de Mike Honey y Nick St Mags):

  • El valor del parámetro de fecha y hora de SSRS debe mostrarse en formato DD/MM/AAAA

Actualización 3 – Causa del problema

Además de lo que @DavidBrownie publicado encontré la documentación de SQL Server 2008 R2:

  • Tipo de conexión de Oracle (SSRS 2008 R2)

Donde mencionaron:

Este tipo de origen de datos incorporado se basa en el proveedor administrado de .NET Framework para Oracle y requiere un componente de software de cliente de Oracle.

Además, si echa un vistazo a la documentación de SQL Server 2017:

  • Tipo de conexión de Oracle (SSRS 2017)

Este tipo de origen de datos integrado utiliza el proveedor de datos de Oracle directamente y requiere un componente de software de cliente de Oracle.

Además, en referencia a la documentación de Microsoft OLE DB Provider for Oracle (que es el antiguo proveedor usado). Ellos mencionaron que:

Esta función se eliminará en una versión futura de Windows. Evite usar esta función en nuevos trabajos de desarrollo y planee modificar las aplicaciones que actualmente usan esta función. En su lugar, utilice el proveedor OLE DB de Oracle.

Razón por la cual se cambió el proveedor utilizado para conectarse a Oracle en Reporting Services.

Aquí puedes ver las reseñas y valoraciones de los usuarios

Recuerda algo, que puedes optar por la opción de interpretar tu experiencia si diste con la solución.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *