Ich verwende eine gespeicherte Prozedur mit Dapper, um Daten aus einer Tabelle abzurufen. Die gespeicherte Prozedur funktioniert einwandfrei, wenn sie in SQL Server ausgeführt wird, und gibt die erforderlichen Informationen zurück.Falsches Datum bei Verwendung der gespeicherten SQL Server-Prozedur mit Dapper
Aber wenn ich Dapper verwenden, um die gespeicherte Prozedur auszuführen und eine Date
abzurufen, wird Date
als 01/01/0001
zurückgegeben.
Hier ist meine gespeicherten Prozedur, die perfekt in SQL Server funktioniert:
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 [email protected]
and [email protected]
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
Die Ergebnisse in SQL Server:
Die Methode, die die Ergebnisse Dapper zu bekommen verwendet:
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;
}
}
Die Ergebnisse in meiner Anwendung:
verwendet Was ist der Datentyp der Datumsspalte in der Tabelle in SQL Server? – CodingYoshi