2010-03-22 14 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.

एसक्यूएल उत्पन्न है:

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

क्या आप अपनी एसक्यूएल संग्रहीत प्रक्रिया की घोषणा पोस्ट कर सकते हैं? पैरामीटर को परिभाषित करने के लिए जहां तक? –

+0

ALTER प्रक्रिया [dbo]। [SearchDirectoryEntries] \t @DirectoryId पूर्णांक, \t @Latitude दशमलव (18, 6), \t @Longitude दशमलव (18, 6), \t @range चीयर्स int – James

+0

क्या हैं 'खोज' और' बिंदु 'की परिभाषाएं? यानी 'search.DirectoryId' एक 'int' है? – ChrisF

उत्तर

22

आपकी क्वेरी में कमांडText param गलत है।

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

'एसकल्प पैरामीटर' के लिए प्रलेखन में कहीं भी नाम से '@' को हटाने के लिए निर्दिष्ट नहीं है। वह कहाँ से आ रहा है? यदि आप 'ऑब्जेक्ट पैरामीटर' का उपयोग कर रहे हैं तो आपको इसे हटाना होगा। – test

संबंधित मुद्दे

 संबंधित मुद्दे