对于仅提出一个基本问题,我深表歉意,但是找不到该错误的原因。
我正在使用实体框架执行存储过程,并传入四个参数,但是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));
产生错误:
过程或函数“ SearchDirectoryEntries”需要未提供的参数“ @DirectoryId”。
生成的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
非常感谢。
查询中的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构造函数中删除“ @”。