2010-03-22 4 views
10

Приносим извинения за задание основного вопроса, однако я не могу найти причину этой ошибки.EntityFramework Процедура или функция '' ожидает параметр '', который не был отправлен

Я использую Entity Framework для выполнения хранимой процедуры, и я передаю четыре параметра, однако база данных 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? Где определяются параметры? –

+0

ALTER PROCEDURE [DBO]. [SearchDirectoryEntries] \t @DirectoryId INT, \t @Latitude десятичных (18, 6), \t @Longitude десятичных (18, 6), \t @range Int Приветствия – James

+0

Какие определения 'search' и' point'? То есть 'search.DirectoryId'' 'int '? – ChrisF

ответ

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

+1

Нигде в документации для 'SqlParameter' не указывается удаление' @ 'от имени. Откуда это? Вам придется удалить его, если вы используете «ObjectParameter». – test

Смежные вопросы