2015-03-31 137 views
9

我在sqlserver 2008上有一個存儲過程,其中一個參數接受空值。我不知道如何在參數上調用一個空值的SP。對於更多的上下文我正在使用EntityFramework 6xx使用EntityFramework調用帶有空參數值的存儲過程

在下一個示例中,參數「@status,@Compatible」可以具有null作爲值,但我只是得到一個異常說那些prarams沒有提供。

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

難道我的回答解決你的問題?如果是這樣,請選擇爲答案。 – DeadlyChambers 2018-02-23 21:02:12

回答

16

我遇到了同樣的問題。如果這些值爲空,它將加載默認值。我實際上需要一個空值,所以對於狀態你應該可以在下面做。

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

檢查這個答案更深入的例子https://stackoverflow.com/a/4556007/1248536

相關問題