2010-03-22 89 views
10

我很抱歉只问一个基本问题,但我找不到这个错误的原因。EntityFramework过程或函数''期望参数'',这是不提供

我正在使用实体框架来执行存储过程,并传入四个参数,但SQL数据库似乎拒绝它们。任何人都可以将我指向正确的方向吗?

我的代码:

ObjectResult<SearchDirectoryItem> resultList = container.ExecuteStoreQuery<SearchDirectoryItem>("SearchDirectoryEntries", 
      new SqlParameter("@DirectoryId", search.DirectoryId), 
      new SqlParameter("@Latitude", point.Latitude), 
      new SqlParameter("@Longitude", point.Longitude), 
      new SqlParameter("@Range", search.RangeMiles)); 

它产生错误:

Procedure or function 'SearchDirectoryEntries' expects parameter '@DirectoryId', which was not supplied.

生成的SQL是:

exec sp_executesql N'SearchDirectoryEntries',N'@DirectoryId int,@Latitude decimal(7,5),@Longitude decimal(6,5),@Range int',@DirectoryId=3,@Latitude=53.36993,@Longitude=-2.37013,@Range=10 

存储过程是:

ALTER PROCEDURE [dbo].[SearchDirectoryEntries] 
@DirectoryId int, 
@Latitude decimal(18, 6), 
@Longitude decimal(18, 6), 
@Range int 

非常感谢。

+0

你可以发布你的SQL存储过程的声明吗?直到参数定义的地方? – 2010-03-22 15:51:04

+0

ALTER PROCEDURE [DBO]。[SearchDirectoryEntries] \t @DirectoryId INT, \t @Latitude十进制(18,6), \t @Longitude十进制(18,6), \t @range诠释 干杯 – James 2010-03-22 16:01:53

+0

哪些“搜索”和“点”的定义?即'search.DirectoryId'和'int'? – ChrisF 2010-03-22 16:06:39

回答

22

查询中的commandText参数不正确。它应该是一个存储过程的调用与参数,而不是仅仅存储过程的名称:

ObjectResult<SearchDirectoryItem> resultList = container.ExecuteStoreQuery<SearchDirectoryItem>(
    "Exec SearchDirectoryEntries @DirectoryId, @Latitude, @Longitude, @Range", 
    new SqlParameter("DirectoryId", search.DirectoryId), 
    new SqlParameter("Latitude", point.Latitude), 
    new SqlParameter("Longitude", point.Longitude), 
    new SqlParameter("Range", search.RangeMiles)); 

另外不要忘记从SqlParameter的构造函数中删除“@”。

+1

谢谢!经过无数次错误启动后,完全解决了我的问题。 – strongriley 2012-09-13 00:45:00

+1

没有在'SqlParameter'的文档中指定从名称中删除'@'。那来自哪里?但是,如果您使用的是ObjectParameter,则必须将其删除。 – test 2015-03-14 20:43:34

相关问题