2016-07-28 9 views
-1

Ich rufe die gespeicherte Prozedur von meinem Visual Studio-Projekt auf und übergebe den Parameter DateTime. HierWie DateTime-Objekt auf Null festgelegt und als Parameter an gespeicherte Prozedur gesendet?

ist C# -Code:

DateTime? dtStartFrom = null; 
var result = _context.Database.SqlQuery<DamageEventsDTL>("SPDamageEventsDTL @dtStartFrom", new SqlParameter("dtStartFrom", dtStartFrom)).ToList(); 

Hier, wie variabel in Stored Procedure definiert:

@dtStartFrom date 

auf dieser Zeile bekomme ich diese Ausnahme:

The parameterized query '(@dtStartFrom nvarchar(4000))SPDamageEventsDTL @dtStartFrom' expects the parameter '@dtStartFrom', which was not supplied. 

Also ich denke, es ist ein Problem mit Nullwerten, also habe ich folgendes versucht:

DateTime? dtStartFrom = DBNull.Value; 

Aber auf Zeile oben Ich bekomme diese Fehlermeldung:

Cannot implicitly convert type 'System.DBNull' to 'System.DateTime?' 

Irgendeine Idee, wie ich gesetzt Datetime-Objekt kann als Parameter in meine gespeicherten Prozedur auf null und gesendet?

+0

Haben Sie die SqlParameter @dtStartFrom versucht zu benennen, anstatt nur dtStartFrom? –

Antwort

1

Ihr Parametername sollte, dass der Treffer:

new SqlParameter("@dtStartFrom", dtStartFrom); 

Edit:

DateTime? dtStartFrom = null; 
SqlParameter sqlDateparam = new SqlParameter("@dtStartFrom", SqlDbType.DateTime); 
sqlDateparam.IsNullable = true; 

if (dtStartFrom.HasValue) 
    sqlDateparam.Value = dtStartFrom.Value; 
else 
    sqlDateparam.Value = DBNull.Value 

var result = _context.Database.SqlQuery<DamageEventsDTL>("SPDamageEventsDTL @dtStartFrom", sqlDateparam).ToList(); 
+0

Danke Ich habe es behoben, aber jetzt bekomme ich Fehler: SqlDateTime Überlauf. Muss zwischen dem 1. Januar 1753 12:00:00 Uhr und dem 31.12.9999 23:59:59 Uhr liegen. Ist es möglich, null als Parameter zu senden? – Michael

+0

@Michael überprüfen Sie die Bearbeitung. – user3185569

+0

Betreff: _ "SqlDateTime overflow" _, verwenden Sie in der DB den Typ 'DATETIME' oder' DATETIME2'? – stakx