我有一個調用存儲過程關閉我的DbContext的問題。存儲過程需要一個表值參數。DbContext ExecuteSqlCommand - 表值存儲過程
該程序的語法是:
ALTER PROCEDURE dbo.SaveResults
@resultID int,
@positiveResults AS dbo.PositiveResultTypes READONLY
AS
我有填充有用於表型有效值數據表(dtResults
)。
我的調用代碼是:
var resultsParam = new SqlParameter("@positiveResults", SqlDbType.Structured);
resultsParam.Value = dtResults;
resultsParam.TypeName = "PositiveResultTypes";
db.Database.ExecuteSqlCommand(
"dbo.SaveResults",
new SqlParameter("@resultID", id),
resultsParam);
這與失敗:
過程或函數 'SaveResults' 預計參數 '@resultID', 但未提供。
可變id
是有效的,而不是在這裏null
(int
,值1
)。
我試圖在調用代碼中將語法更改爲「dbo.SaveResults @resultID @positiveResults
」,結果沒有任何變化。
爲什麼沒有看到這個參數?
編輯
SQL事件探查器顯示該參數傳遞正確...
declare @p3 dbo.PositiveResultTypes
insert into @p3 values(N'1')
insert into @p3 values(N'4')
insert into @p3 values(N'6')
exec sp_executesql N'dbo.SaveResults',N'@positiveResults [PositiveResultTypes] READONLY,@resultID int',@[email protected],@resultID=1
然而,這句法的EXEC是有點不正確。當我執行這個對數據庫,我得到了相同的結果:
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
Msg 201, Level 16, State 4, Procedure SaveResults, Line 0
Procedure or function 'SaveResults' expects parameter '@resultID', which was not supplied.
我想這樣做與db.Database.ExecuteSqlCommand()(EF DbContext)如圖所示,而不是原始的ADO.Net,但如果我必須去那樣我會。 – Patrick 2014-09-23 18:06:26
@Patrick我認爲你可能需要下降到較低的水平,但你可以做的一件事是你可以使用'db.Database.Connection'作爲SqlCommand的連接源。 – 2014-09-23 19:01:16