2015-03-31 12 views
9

Tôi đã lưu trữ thủ tục trên sqlserver 2008 và một trong các tham số chấp nhận giá trị null. tôi không biết làm thế nào để gọi SP đó với một giá trị null trên tham số. cho một bối cảnh ít hơn tôi đang sử dụng EntityFramework 6xxThủ tục lưu trữ cuộc gọi với giá trị tham số null bằng EntityFramework

Trong ví dụ tiếp theo, các tham số "@status, @Compatible" có thể có giá trị null, nhưng tôi chỉ nhận được ngoại lệ nói rằng những prarams đó không được cung cấp.

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

đã trả lời của tôi giải quyết câu hỏi của bạn? Nếu vậy hãy chọn làm câu trả lời. – DeadlyChambers

Trả lời

16

Tôi đã gặp sự cố tương tự. Nếu các giá trị là null, nó sẽ tải mặc định. Mà tôi thực sự cần một null, vì vậy cho tình trạng bạn sẽ có thể làm dưới đây.

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

kiểm tra câu trả lời này để biết thêm trong các ví dụ sâu https://stackoverflow.com/a/4556007/1248536

Các vấn đề liên quan