none
Resultado de ejecutar un Procedimiento Almacenado RRS feed

  • Pregunta

  • Tengo un Procedimiento Almacenado en una Base de Datos SQL Server que me devuelve el Último Registro insertado en dicha Base de Datos. Este consta de los siguientes campos: Título, Fecha, Editor, Apellidos Autor y Nombre Autor, todos ellos son de tipo nvarchar, con diferentes tamaños, según la necesidad.

    Si lo ejecuto en el Explorador de Servidores de Visual Studio, el resultado es correcto, o sea, me devuelve el registro completo, con el campo Fecha (que en este caso es de tipo string, porque así lo tengo configurado) en formato dd/mm/yyyy. Hasta quí todo correcto.

    El problema viene cuando este resultado lo envío a un MessageBox, pues entonces este mismo campo Fecha me aparece con el siguiente formato dd/mm/yy, siendo yy = a 20, esto es, los dos primeros dígitos del milenio en el que nos encontramos.

    Si alguien fuera tan amable de sugerirme un motivo y una solución le quedaría eternamente agradecido.

    Muchas gracias.

    martes, 19 de junio de 2018 9:13

Todas las respuestas

  • Muestre la llamada que tiene en el código a MessageBox.Show().

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 19 de junio de 2018 11:34
  •  db.usp_UltimoRegistro(ref oTitulo02, ref oFecha02, ref oEditor02, ref oApellidos02, ref oNombre02);

                string msg = "\r\n" + "El último Título registrado es: " + "\r\n" + "\r\n" +
                    oTitulo02 + "\r\n" + "\r\n" + "Fecha: " + oFecha02 + "\r\n" + "\r\n" +
                    "Editor: " + oEditor02 + "\r\n" + "\r\n" + "Autor: " + oApellidos02 + ", " +oNombre02;

                winMessageBox.Show("Información de Último Registro", msg, MessageBoxButton.OK, MessageBoxImage.Information);

    Aclaraciones: 

    winMessageBox: es un MessageBox personalizado. (El error también aparece en el MessageBox de WPF)

    Las variables oTitulo02, oFecha02, oEditor02, oApellidos02 y oNombre02, son los parámetros del Procedimiento Almacenado; como se ve, se pasan por referencia.

    usp_UltimoRegistro: es el nombre del Procedimiento Almacenado

    Esto es la definición del Procedimiento Almacenado:

    CREATE PROCEDURE [dbo].[usp_UltimoRegistro]
    @Titulo nvarchar(130)= NULL OUTPUT,
    @Fecha nvarchar(10)= NULL OUTPUT,
    @Editor nvarchar(70)= NULL OUTPUT,
    @Apellidos nvarchar(70)= NULL OUTPUT,
    @Nombre nvarchar(30)= NULL OUTPUT
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

        -- Insert statements for procedure here
    SELECT TOP 1 @Titulo=dbo.Titulos.TITULO, @Editor=dbo.Editores.EDITOR, @Apellidos=dbo.Autores.APELLIDOS, @Nombre=dbo.Autores.NOMBRE, @Fecha=dbo.Titulos.FECHA
    FROM         dbo.Autores INNER JOIN
                          dbo.Autores_Titulos ON dbo.Autores.Id_AUTOR = dbo.Autores_Titulos.Id_AUTOR INNER JOIN
                          dbo.Titulos ON dbo.Autores_Titulos.Id_TITULO = dbo.Titulos.Id_TITULO INNER JOIN
                          dbo.Editores ON dbo.Titulos.Id_EDITOR = dbo.Editores.Id_EDITOR
    ORDER BY dbo.Titulos.Id_TITULO DESC
    END

    martes, 19 de junio de 2018 14:21
  • En tu sentencia sql cambia  @Fecha=dbo.Titulos.FECHA por: @Fecha=Convert(Varchar(10), dbo.Titulos.FECHA, 3)
    martes, 19 de junio de 2018 14:41
  • Muchísimas gracias por tu interés en mi problema. Te diré que una vez probado me sigue apareciendo lo mismo, posiblemente porque no haya nada que convertir ya que el campo FECHA de la Base de Datos es de tipo string y no de tipo Date.

    De todas las maneras, vuelvo a darte las gracias por tu inestimable ayuda. Muchas gracias.

    martes, 19 de junio de 2018 15:24
  • Ok, imagino que si corre el programa paso a paso y examina la variable msg justo antes de winMessageBox.Show(), verá lo que ve en message box.  ¿Cierto?

    Si es así, el error probablemente está en db.usp_UltimoRegistro().  Muéstreme la definición de esa función.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 19 de junio de 2018 21:22
  • No entiendo muy bien lo que quiere decir.

    La secuencia completa es la siguiente:

    private DataClassesDataContext db;

    usp_UltimoRegistro: es el nombre del Procedimiento Almacenado

    Las variables oTitulo02oFecha02oEditor02oApellidos02 y oNombre02, son los parámetros del Procedimiento Almacenado; como se ve, se pasan por referencia.

     db.usp_UltimoRegistro(ref oTitulo02, ref oFecha02, ref oEditor02, ref oApellidos02, ref oNombre02);

                string msg = "\r\n" + "El último Título registrado es: " + "\r\n" + "\r\n" +
                    oTitulo02 + "\r\n" + "\r\n" + "Fecha: " + oFecha02 + "\r\n" + "\r\n" +
                    "Editor: " + oEditor02 + "\r\n" + "\r\n" + "Autor: " + oApellidos02 + ", " +oNombre02;

                winMessageBox.Show("Información de Último Registro", msg, MessageBoxButton.OK, MessageBoxImage.Information);

    Gracias por su interés. Un saludo.

    miércoles, 20 de junio de 2018 7:03
  • Hola nuevamente.  Lo que necesito es que:

    1. Confirme que la variable msg, justo antes de WinMessageBox.Show() efectivamente ya tiene el valor de fecha malo.
    2. Confirmado lo anterior (que personalmente no me cabe duda, pero así va usted aprendiendo a ubicar los problemas), tenemos que retroceder un paso.  Retroceder un paso significa db.usp_UiltimoRegistro().  Esta es una llamada a esa función.  Muéstreme el código de esta función.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    miércoles, 20 de junio de 2018 11:21
  • Como muy bien ha adivinado soy totalmente nuevo en el asunto.

    Efectivamente en la variable msg ya aparece el error en la fecha.

    Ahora bien, no entiendo lo de "mostrar el código de esta función" en referencia a db.usp_UltimoRegistro(). Aquí lo que hago es ejecutar el Procedimiento Almacenado contra la Base de Datos representada por la variable db.

    Perdone mi gran ignorancia.

    Muchas gracias.

    jueves, 21 de junio de 2018 7:47
  • Bueno, muéstreme el código de esa función.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    jueves, 21 de junio de 2018 19:48
  • Lo siento pero no se a que código se refiere.

    Muchas gracias.

    viernes, 22 de junio de 2018 8:03
  • El código de la función que le he puesto en negrita en las respuestas anteriores.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    viernes, 22 de junio de 2018 10:29
  • He estado de vacaciones y he tenido abandonado el asunto, por lo que le pido disculpas. 

    Supongo que se refiere a este código:

    SELECT TOP 1 @Titulo=dbo.Titulos.TITULO, @Editor=dbo.Editores.EDITOR, @Apellidos=dbo.Autores.APELLIDOS, @Nombre=dbo.Autores.NOMBRE, @Fecha=dbo.Titulos.FECHA
    FROM         dbo.Autores INNER JOIN
                          dbo.Autores_Titulos ON dbo.Autores.Id_AUTOR = dbo.Autores_Titulos.Id_AUTOR INNER JOIN
                          dbo.Titulos ON dbo.Autores_Titulos.Id_TITULO = dbo.Titulos.Id_TITULO INNER JOIN
                          dbo.Editores ON dbo.Titulos.Id_EDITOR = dbo.Editores.Id_EDITOR
    ORDER BY dbo.Titulos.Id_TITULO DESC

    Este es el código del Procedimiento almacenado usp_UltimoRegistro()


    domingo, 12 de agosto de 2018 10:44