我正在使用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