2010-03-22 8 views
10

Ich entschuldige mich für die Frage nur eine grundlegende Frage, aber ich kann nicht die Ursache für diesen Fehler finden.EntityFramework Prozedur oder Funktion '' erwartet Parameter '', der nicht geliefert wurde

Ich benutze Entity Framework, um eine Stored Procedure auszuführen, und ich übergebe vier Parameter, aber die SQL-Datenbank scheint sie abzulehnen. Kann mir jemand in die richtige Richtung zeigen?

Mein Code:

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

, die den Fehler produziert:

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

Die SQL erzeugt wird:

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 

Die gespeicherten Prozeduren ist:

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

Vielen Dank.

+0

Können Sie die Deklaration Ihrer gespeicherten SQL-Prozedur posten? Bis zu wo sind die Parameter definiert? –

+0

ALTER PROCEDURE [DBO]. [SearchDirectoryEntries] \t @DirectoryId int, \t @Latitude DECIMAL (18, 6), \t @Longitude DECIMAL (18, 6), \t @range int Prost – James

+0

Was sind die Definitionen der 'Suche' und' Punkt'? d. h. Ist 'search.DirectoryId' ein' int'? – ChrisF

Antwort

22

Der Parameter commandText in Ihrer Abfrage ist falsch. Es sollte statt nur Name der gespeicherten Prozedur mit Parametern ein Aufruf einer gespeicherten Prozedur sein:

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

Vergessen Sie auch nicht entfernen ‚@‘ von SqlParameter Konstruktor.

+1

Danke! Mein Problem wurde nach zahlreichen Fehlstarts behoben. – strongriley

+1

Nirgendwo in der Dokumentation zu 'SqlParameter' gibt es an, das' @ 'aus dem Namen zu entfernen. Woher kommt das? Sie müssen es jedoch entfernen, wenn Sie einen 'ObjectParameter' verwenden. – test

Verwandte Themen