Entity Framework : Die angegebene Umwandlung von einer materialisierten " - System.String' Typ 'System.DateTime' geben ist nicht gültig
Ich habe eine SP, die ich ausführen mit Hilfe von SqlQuery
Methode der DbContext.Database
. Ich rufe es wie folgt:
EDIT 1:- übergabe DateTime
jetzt
var t = form["datetime"];//value is 2013-May-08 09:30
DateTime dtm;
if (!DateTime.TryParse(t, out dtm))//successfully parses
dtm = new DateTime(2013, 05, 8, 9, 30, 0);
var rTime= new SqlParameter("@rTime", dtm);
var result = UoW.ExecuteSp<SPResult>("spResult @rTime", rTime).ToList();
Die Letzte Zeile wirft der Ausnahme, dass die angegebene Umwandlung von string
zu DateTime
ist nicht gültig.
Folgenden ist die definition der SP.
ALTER PROC [dbo].[spResult]
(
@rTime SMALLDATETIME --VARCHAR(32)
)
AS
BEGIN
--OTHER CODE
END
Wenn ich Sie direkt ausführen die SP im SQL Management Studio läuft es ohne problem:
EXEC spResult ='2013-May-08 09:30'
Im SP der string umgewandelt wird, um Datum-Uhrzeit wie folgt ein:
@resultAt SMALLDATETIME = CAST(@rTime AS SMALLDATETIME)
Was läuft hier falsch?
Ist die input-parameter an die gespeicherte Prozedur ein string?
Schlechte Gewohnheiten zu treten : die Wahl der falschen Datentyp - verwenden Sie immer den am besten geeigneten Datentyp - das ist, was Sie dort für, nachdem alle! Also, wenn Ihre gespeicherte Prozedur erwartet, dass ein
Ich war vorbei
Aber dann sollten Sie sich warum war es, was Ihnen die falschen Ergebnisse - nur das ändern in einen string ist der denkbar schlechteste Ansatz....
Schlechte Gewohnheiten zu treten : die Wahl der falschen Datentyp - verwenden Sie immer den am besten geeigneten Datentyp - das ist, was Sie dort für, nachdem alle! Also, wenn Ihre gespeicherte Prozedur erwartet, dass ein
SMALLDATETIME
- warum werden nicht die parameter von diesem Typ??Ich war vorbei
DateTime
Objekt auf den ersten, aber das war nicht zu geben richtige Ergebnis :'(Aber dann sollten Sie sich warum war es, was Ihnen die falschen Ergebnisse - nur das ändern in einen string ist der denkbar schlechteste Ansatz....
InformationsquelleAutor TheVillageIdiot | 2013-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was bedeutet
spResult
nehmen als parameter? Vermutlich ist es eindatetime
? In dem Fall: ihm eineDateTime
:oder
Wenn der Fehler bezieht sich auf
SPResult
- gut, das wir nicht sehen können, so ist es schwer zu Kommentar: aber wieder - map SQL[n][var]char(len|max)
zu C#string
und anzeigen SQLdatetime
zu C#DateTime
.DateTime
wieder, aber immer noch in der SchwebeInformationsquelleAutor Marc Gravell