2010-03-22 41 views
10

Tôi xin lỗi vì đã hỏi một câu hỏi cơ bản, tuy nhiên tôi không thể tìm ra nguyên nhân của lỗi này.Thủ tục hoặc chức năng EntityFramework '' mong đợi tham số '', không được cung cấp

Tôi đang sử dụng Khuôn khổ thực thể để thực thi Quy trình được lưu trữ và tôi chuyển bốn tham số, tuy nhiên cơ sở dữ liệu SQL dường như từ chối chúng. ai đó có thể chỉ cho tôi phương hướng đúng không?

Mã của tôi:

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)); 

nào tạo ra lỗi:

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

SQL được tạo ra là:

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 

Thủ tục lưu trữ là:

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

Rất cám ơn.

+0

Bạn có thể đăng bản khai báo thủ tục lưu sẵn SQL của mình không? Tối đa các thông số được xác định ở đâu? –

+0

ALTER THỦ TỤC [dbo]. [SearchDirectoryEntries] \t @DirectoryId int, \t thập phân @Latitude (18, 6), \t thập phân @Longitude (18, 6), \t @range int Cheers – James

+0

là gì định nghĩa của 'tìm kiếm' và' điểm'? tức là 'search.DirectoryId' là' int'? – ChrisF

Trả lời

22

Thông số lệnh CommandText trong truy vấn của bạn không chính xác. Nó phải là một cuộc gọi đến một thủ tục được lưu trữ với các tham số thay vì chỉ tên thủ tục được lưu trữ:

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)); 

Cũng đừng quên xóa '@' khỏi hàm tạo SqlParameter.

+1

Cảm ơn bạn! Hoàn toàn cố định vấn đề của tôi sau nhiều lần bắt đầu sai. – strongriley

+1

Không nơi nào trong tài liệu hướng dẫn cho 'SqlParameter' nó chỉ định để loại bỏ' @ 'khỏi tên. Nó đến từ đâu? Bạn sẽ phải loại bỏ nó nếu bạn đang sử dụng 'ObjectParameter'. – test

Các vấn đề liên quan