2015-03-31 3 views
9

Ich habe eine gespeicherte Prozedur auf SQL Server 2008 und einer der Parameter akzeptiert Nullwerte. Ich weiß nicht, wie ich diesen SP mit einem Null-Wert für den Parameter aufrufen soll. Für ein wenig mehr Kontext verwende ich EntityFramework 6xxGespeicherte Prozedur mit einem Null-Parameterwert mit EntityFramework aufrufen

Auf dem nächsten Beispiel können die Parameter "@status, @Compatible" null als Wert haben, aber ich bekomme nur eine Ausnahme sagen, dass diese Prarams nicht zur Verfügung gestellt wurde.

public override IList<MyOutputType> SearchStuff(string Term, int? status, bool? Compatible, long TMPLDMID, int RangeFrom, int RangeTo) 
{ 
    List<SqlParameter> par = new List<SqlParameter>(); 
    par.Add(new SqlParameter("@Term", System.Data.SqlDbType.VarChar, 50) { Value = "%" + Term + "%" }); 
    par.Add(new SqlParameter("@status", System.Data.SqlDbType.Int) { Value = status, IsNullable = true }); 
    par.Add(new SqlParameter("@Compatible", Compatible) { IsNullable = true }); 
    par.Add(new SqlParameter("@TMPLDMID", TMPLDMID)); 
    par.Add(new SqlParameter("@RangeFrom", RangeFrom)); 
    par.Add(new SqlParameter("@RangeTo", RangeTo)); 

    return db.Database.SqlQuery<MyOutputType>(
     "EXEC [spSearchForStuff] @Term, @status, @Compatible, @TMPLDMID, @RangeFrom, @RangeTo", par.ToArray() 
    ).ToList(); 
+0

Haben meine Antwort Ihre Frage lösen? Wenn ja, bitte als Antwort auswählen. – DeadlyChambers

Antwort

16

Ich stieß auf das gleiche Problem. Wenn die Werte null sind, wird der Standardwert geladen. Wobei ich eigentlich eine Null brauchte, also für den Status solltest du unten tun können.

par.Add(new SqlParameter("@status", (object)status??DBNull.Value); 

Check diese Antwort für mehr in die Tiefe Beispiele https://stackoverflow.com/a/4556007/1248536