Fecha incorrecta al usar el procedimiento almacenado de SQL Server con Dapper

c# dapper sql-server

Pregunta

Estoy usando un procedimiento almacenado con Dapper para recuperar datos de una tabla. El procedimiento almacenado funciona bien cuando se ejecuta en SQL Server y devuelve la información requerida.

Pero cuando uso Dapper para ejecutar el procedimiento almacenado y recuperar una Date , la Date se devuelve como 01/01/0001 .

Aquí está mi procedimiento almacenado que funciona perfectamente en SQL Server:

ALTER PROCEDURE [dbo].[spRankings_GetByEventAndGender]
   @Event varchar(50),
   @Gender varchar(10)
AS
BEGIN
    DECLARE @event_factor INT = CASE
                                   WHEN @Event IN ('Javelin', 'Discus', 'Shot Put', 'Hammer', 'Long Jump', 'High Jump', 'Triple Jump', 'Pole Vault')
                                      THEN -1 /* reverse ranking = highest value is best */
                                      ELSE 1  /* normal ranking = lowest value is best */
                                END;

    SELECT 
        CASE
           WHEN a.mark = ABS(b.mark)
              THEN CAST(b.rank AS VARCHAR)
              ELSE ''
        END AS [Rank],
        /*
         ,a.athleteid
         ,a.teamid
         ,a.eventid
        */
        CASE
           WHEN @event_factor = -1
              THEN LTRIM(STR(a.mark, 10, 2))
              ELSE FORMAT(DATEADD(SECOND, FLOOR(a.mark), 0),case when a.mark<60 then '' else 'm:' end+'ss')
                 +substring(ltrim((str(cast(a.mark as decimal(12,5))%1,10,2))),2,10)
          end as Mark
         ,a.wind as Wind
         ,d.eventname as [Event]
         ,c.firstname+' '+c.lastname as Athlete
         --,Convert(varchar(10),c.BirthDate,103) as [Birth Date]
         ,c.BirthDate as [BirthDate]

         ,e.teamname as [Team]
         ,a.venue as Venue
         --, Convert(varchar(10),a.PerformanceDate,103) as [Performance Date]
         ,a.PerformanceDate as [Performance Date]
     from dbo.Performances as a
          inner join (select a.PersonId
                            ,a.eventid
                            ,min(a.mark*@event_factor) as mark
                            ,rank() over(partition by a.eventid order by min(a.mark*@event_factor)) as [rank]
                            ,avg(a.mark) as avg_mark
                        from dbo.Performances as a
                             inner join dbo.Persons as b
                                     on b.PersonId=a.PersonId
                             inner join dbo.[Events] as c
                                     on c.eventid=a.eventid
                             inner join dbo.Meets as d
                                    on d.MeetId = a.MeetId
                       where b.gender=@Gender
                         and c.eventname=@Event
                       group by a.PersonId
                               ,a.eventid
                     ) as b
                  on b.eventid=a.eventid
                 and b.PersonId=a.PersonId
          inner join dbo.Persons as c
                  on c.PersonId=a.PersonId
          inner join dbo.events as d
                  on d.eventid=a.eventid
          inner join dbo.teams as e
                  on e.teamid=a.teamid
            inner join dbo.Meets as m
                on m.MeetId = a.MeetId

    order by a.eventid
            ,a.mark*@event_factor
            ,b.[rank]
/*
            ,b.avg_mark
            ,a.athleteid
*/
end

Los resultados en SQL Server:

Mi procedimiento almacenado resulta en SQL Server

El método que usa Dapper para obtener los resultados:

public List<RankingsModel> GetRankingsByEventAndGender(string eventName, string gender) {
    using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.GetConString("GARanks"))) {
        var output = connection.Query<RankingsModel>($"dbo.spRankings_GetByEventAndGender @Event, @Gender", new { Event=eventName, Gender=gender}).ToList();
        return output;
    }
}

Los resultados en mi aplicación:

Los resultados en mi aplicación

Respuesta popular

Probablemente tenga una propiedad llamada 'PerformanceDate' en la clase RankingsModel que no se correlaciona con 'Performance Date' devuelta desde la llamada a DB.

Amablemente actualice el SQL para devolver 'PerformanceDate' o haga el mismo nombre para ambos.

La otra opción es usar asignación de columnas



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué