2010-03-22 17 views
10

sağlanmadı', 'parametresi bekler'. Ancak SQL Veritabanı bunları reddetmek gibi görünüyor,EntityFramework Yordam veya işlev 'ancak bu hatanın nedenini bulamıyorum, sadece temel bir soruyu soran için özür

ben bir saklı yordam yürütülecek Varlık Framework kullanıyorum ve ben dört parametrelerinde geçirerek. Beni doğru yöne yönlendiren var mı?

Kodum

: SQL oluşturulan

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

geçerli:: hata üretir

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

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 

saklanan prosedürleri geçerli:

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

Çok teşekkürler. Sorgununuzdaki

+0

Eğer SQL saklı yordam ilanını gönderebilir miyim? Parametrelerin tanımlandığı yere kadar mı? –

+0

alter PROSEDÜR [Dbo]. [SearchDirectoryEntries] \t @DirectoryId int \t @Latitude ondalık (18, 6), \t @Longitude ondalık (18, 6), \t @range alkış int nelerdir – James

+0

'arama' ve 'nokta' tanımları? yani 'search.DirectoryId' bir' int' midir? – ChrisF

cevap

22

CommandText param yanlıştır.

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

Ayrıca SqlParameter kurucusundan '@' kaldırmak için unutma: yerine sadece saklı yordam adının parametrelerle bir saklı yordam çağrısı olmalıdır.

+1

Teşekkür ederiz! Sayısız sahte başlatmadan sonra sorunumu tamamen düzeltdim. – strongriley

+1

"SqlParameter" dokümantasyonunun hiçbir yerinde '@' belgesini kaldırmak için yer yok. Bu nereden geliyor? Ancak bir 'ObjectParameter' kullanıyorsanız, onu kaldırmak zorunda kalacaksınız. – test

İlgili konular