我正在使用C#中的實體框架,並且遇到了一個我已經跟蹤到正在生成的SQL語句的問題。sp_executesql - 過程或函數期望不提供的參數
存儲過程需要一個表值參數,但這似乎不是問題。
在SQL事件探查器,我看到正在執行的情況如下:
declare @p3 dbo.PositiveTypes
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'@resultID int, @positiveResults [PositiveTypes] READONLY',
@resultID=1,
@[email protected]
這導致:
消息201,級別16,狀態4,過程SaveResults,行0
程序或者函數'SaveResults'需要參數'@resultID',它沒有提供。
這個程序的定義是:
ALTER PROCEDURE [dbo].[SaveResults]
@resultID int,
@positiveResults AS dbo.PositiveTypes READONLY
用戶定義的類型是:
CREATE TYPE [dbo].[PositiveTypes] AS TABLE(
[TypeID] [tinyint] NULL
)
什麼不對這個sp_executesql
語法?爲什麼它認爲@resultID
在這裏沒有被正確傳遞?
你是如何執行這個?有沒有辦法設置命令類型,以便EF知道它是一個存儲過程? – 2014-09-23 20:21:15
它正在EF中使用DbContext上的Database.ExecuteSqlCommand執行。它似乎認識到它是基於來自SQL Server的錯誤消息(「過程或函數」...期望「參數」)的存儲過程。我試圖確定sp_executesql語法究竟出了什麼問題,然後根據需要後退工作以重新編寫代碼。 – Patrick 2014-09-23 20:28:36
啊,好的。我認爲可能有一些類似的命令類型[但似乎並非如此](http://msdn.microsoft.com/en-us/library/system.data.entity.database_methods(v = vs.113 ).aspx) – 2014-09-23 20:34:51