2010-03-22 94 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

相關問題