2013-11-26 52 views
0

我正嘗試使用Database.SqlQuery從EF5執行存儲過程。但是第二個參數在這裏不能識別。參數化查詢不識別EF5中的參數嗎?

Error: "The parameterized query '(@custNum nvarchar(7), @PrimaryDisc bigint, @SecondaryDisc bigint)' expects the parameter '@PrimaryDisc', which was not supplied."

代碼

var results = _MiscContext.Database.SqlQuery<TempTechDisciplines>(
     "exec sp_getTechnicalDiscipline @CustNum, @PrimaryDisc, @SecondaryDisc", 
     new SqlParameter("custNum", CustomerNum), 
     new SqlParameter("PrimaryDisc",SqlDbType.BigInt, 0), 
     new SqlParameter("SecondaryDisc",SqlDbType.BigInt, 0)) 
     .ToList<TempTechDisciplines>(); 

什麼是這裏的問題?

+1

嘗試'@',同時添加參數名稱,例如:'new SqlParameter(「@ custNum」,CustomerNum),' – Habib

+1

沒有工作。通過添加'@' – James123

+2

[我不認爲你使用SqlParameter構造函數,你認爲你是](http://msdn.microsoft.com/en-us/library/hex23w80(v=vs.110)。 ASPX)。 –

回答

1

它適合我這篇文章。

http://blogs.msdn.com/b/diego/archive/2012/01/10/how-to-execute-stored-procedures-sqlquery-in-the-dbcontext-api.aspx

var custNum = new SqlParameter {ParameterName = "CustNum", Value = CustomerNum}; 
var primaryDisc = new SqlParameter { ParameterName = "PrimaryDisc", Value = 0 }; 
var secondaryDisc = new SqlParameter { ParameterName = "SecondaryDisc", Value = 0 }; 

var results = _MiscContext.Database.SqlQuery<TempTechDisciplines>(
      "exec sp_getTechnicalDiscipline @CustNum, @PrimaryDisc, 
       @SecondaryDisc", 
       custNum,primaryDisc,secondaryDisc).ToList<TempTechDisciplines>(); 
+0

是的,設置實際值應該修復它。 –

0

如果一個參數值(CustomerNum)爲空,則該參數將不被序列化,並且將發生該錯誤。

檢查並添加每個參數添加('0' for CustomerNum),如果不是,如果需要CustomerNum <> 0IS NULL檢查的默認值。