2008-09-17 13 views
5

से संग्रहित प्रक्रिया वापसी मानों को कैसे पुनर्प्राप्त करें I TableAdapters का उपयोग करते समय संग्रहीत प्रक्रिया से वापसी मूल्य प्राप्त करने का एक शानदार तरीका नहीं मिल सकता है।तालिका एडाप्टर

ऐसा लगता है कि गैर-स्केलर संग्रहीत प्रक्रिया कॉल का उपयोग करते समय TableAdapter SQL संग्रहीत प्रक्रिया वापसी मानों का समर्थन नहीं करता है। आप उम्मीद करेंगे कि स्वत: जेनरेट किए गए फ़ंक्शन से वापसी मूल्य संग्रहीत प्रक्रिया से वापसी मूल्य होगा लेकिन यह नहीं है (यह वास्तव में प्रभावित पंक्तियों की संख्या है)। यद्यपि 'आउट' पैरामीटर का उपयोग करना संभव है और एक चर को स्वत: जेनरेट किए गए कार्यों के रेफरी के रूप में पास करना संभव है, यह एक बहुत ही साफ समाधान नहीं है।

मैंने इसे हल करने के लिए वेब पर कुछ बदसूरत हैक देखा है, लेकिन कोई सभ्य समाधान नहीं है। किसी भी सहायता की सराहना की जाएगी।

+0

वास्तव में, मुझे एक ही समस्या है, यह हास्यास्पद है कि हैकिंग – nicodemus13

उत्तर

0

इस प्रश्न को बंद करते हुए ऐसा लगता है कि वापसी मान समर्थित नहीं हैं और कोई सुरुचिपूर्ण कामकाज नहीं है!

1

वापसी मूल्य प्राप्त करने का तरीका SqlCommand ऑब्जेक्ट पर एक SQLParameter का उपयोग करना है, जिसकी दिशा पैरामीटर डिटेक्शन पर सेट है .ReturnValue। भरने के बाद आपको TableAdapter की SelectCommand प्रॉपर्टी की जांच करनी चाहिए।

+0

हैकिंग के बिना वापसी मान समर्थित नहीं हैं, SelectCommand प्रॉपर्टी (AFAIK) TableAdapter के लिए निजी है। इसलिए मुझे प्रत्येक टेबल एडाप्टर को आंशिक वर्ग के साथ विस्तारित करना होगा, जो मेरी राय में, वह शानदार समाधान नहीं है जिसे मैं ढूंढने की उम्मीद कर रहा हूं। –

0

मैं निश्चित रूप से कुछ नहीं कह सकता क्योंकि मैंने TableAdapters का उपयोग नहीं किया है, लेकिन आपको अपनी संग्रहीत प्रक्रिया को देखने और अपनी प्रक्रिया के आसपास निम्नलिखित शामिल करने की आवश्यकता हो सकती है।

SET ROWCOUNT OFF 

BEGIN 
<Procedure Content> 
END 

SET ROWCOUNT ON 
+0

सुझाव के लिए धन्यवाद, लेकिन दुर्भाग्यवश ROWCOUNT को सेट करना मेरे मुद्दे को हल करने के लिए प्रकट नहीं होता है। –

1

नोट: जाने के लिए एक SqlParameter जहां दिशा = ParameterDirection.ReturnValue

इसके साथ ही कहा उपयोग कर रहा है जिस तरह से, किसी ने पहले ही उल्लेख किया SqlParameters के रूप में, यहाँ एक गतिशील विधि एक डेटासेट का उपयोग कर वैकल्पिक है। (अगर thats तुम कैसे सवारी):

उदाहरण SQL विवरण और fallows के रूप में सी #:

string sql = @"DECLARE @ret int 
      EXEC @ret = SP_DoStuff 'parm1', 'parm2' 
      SELECT @ret as ret"; 

DataSet ds = GetDatasetFromSQL(sql); //your sql to dataset code here... 

int resultCode = -1; 
int.TryParse(ds.Tables[ds.Tables.Count-1].Rows[0][0].ToString(), out resultCode); 

संग्रहीत प्रक्रिया परिणाम एक डेटासेट में लोड कर रहे हैं और संग्रहीत प्रक्रिया में चुनिंदा बयानों वापसी के रूप में के रूप में कई DataTables होगा ।

डेटासेट में अंतिम डेटाटेबल में 1 पंक्ति और 1 कॉलम होगा जिसमें संग्रहित प्रक्रिया वापसी मूल्य होगा।

1

असल में, तुम सब करने की जरूरत है एक SELECT कथन, नहीं एक वापसी कथन का उपयोग करके संग्रहीत प्रक्रिया से अपनी अंतिम मान देने के लिए है। चयन का नतीजा वापसी मूल्य होगा। उदाहरण के लिए, यदि आप बस अपना एसपी एक्जिट स्टेटमेंट "चयन 1" बनाते हैं तो आपको 1 वापस मिल जाएगा। अब केवल उस वास्तविक स्केलर को चुनें जिसे आप वापस करना चाहते हैं।

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