53

पर तालिका मूल्यवान पैरामीटर के लिए खाली सूची या शून्य मान बाध्यकारी मैंने एक संग्रहीत प्रक्रिया बनाई है जो एक तालिका मूल्यवान पैरामीटर लेता है जो कि एक प्रकार के एक कॉलम वाले एक तालिका है। विचार केवल स्टोर प्रक्रिया में आईडी की एक सूची पास करना है और एसपी को डेटा के साथ काम करने की अनुमति देना है। हालांकि, ऐसे मामले में जहां पास करने के लिए कोई डेटा नहीं है, मुझे समस्याएं आ रही हैं (जब मेरे पास डेटा है तो चीजें सही तरीके से काम करती हैं)। मैं एक सूची को एक आईनेमरेबल में परिवर्तित कर रहा हूं, और एसपी के लिए तालिका मूल्यवान पैरामीटर को बाध्यकारी कर रहा हूं। मैंने एक खाली सूची बांधने की कोशिश की है, जिसके परिणामस्वरूप त्रुटिसंग्रहीत प्रक्रिया (.net)

सिस्टम। ऑर्ग्यूमेंट अपवाद: SqlDataRecord गणना में कोई रिकॉर्ड नहीं है। किसी भी पंक्ति के साथ एक टेबल-मूल्यवान पैरामीटर भेजने के लिए, इसके बजाय मान के लिए एक शून्य संदर्भ का उपयोग करें।

मैं तो एक शून्य मान (जो मैंने सोचा था क्या उपरोक्त संदेश पर हो रही थी) के लिए बाध्य करने की कोशिश की, लेकिन वह केवल एक अलग त्रुटि संदेश में हुई

System.NotSupportedException: पैरामीटर के लिए 'DBNull मूल्य @MainItemIdList ' समर्थित नहीं है। तालिका-मूल्यवान पैरामीटर डीबीएनयूएल नहीं हो सकते हैं।

ऐसा प्रतीत नहीं होता है कि आप तालिका मूल्यवान पैरामीटर को स्पै घोषणापत्र में शून्य के रूप में घोषित कर सकते हैं। तालिका मूल्यवान पैरामीटर पर खाली सूची को बाध्य करने के लिए सही विधि क्या है?

उत्तर

78

चाल है: सभी पर पैरामीटर में पास न करें। तालिका-मूल्यवान पैरामीटर के लिए डिफ़ॉल्ट मान एक खाली तालिका है।

यह एक शर्म की बात है कि अपवाद संदेश इतना अनुपयोगी है।

+8

यह एक नया उत्तर जोड़ने या एक में सुधार करने के लिए कभी दर्द नहीं होता है। जानकारी अभी भी प्रासंगिक है और किसी और को यह उपयोगी लगेगा (यह इस साइट का पूरा बिंदु है!)। +1 –

+0

सादे पुराने टेबल एडेप्टर का उपयोग करते हुए यह कैसे करना है? TableAdapter एसपीआर प्रॉक्सी फ़ंक्शन को एसपी के समान हस्ताक्षर के साथ टेम्पलेट करता है, और यह एक शून्य-शून्य मान की अपेक्षा करता है। शून्य या DbNull पास हो रहा है। Value एक त्रुटि फेंकता है। –

+0

ऊपर 1. यह वही है जो मुझे करने की ज़रूरत है - परीक्षण किया गया और यह बहुत अच्छा काम करता है। –

2

मैं 'पैरामीटर पास नहीं कर रहा' कथन का मतलब है कि मैं थोड़ा उलझन में था।

new SqlParameter("yourParameterName", SqlDbType.Structured) 
    { 
     Direction = ParameterDirection.Input, 
     TypeName = "yourUdtType", 
     Value = null 
    }; 

यह 'डिफ़ॉल्ट' के रूप में पैरामीटर पारित करेंगे: क्या इकाई की रूपरेखा ExecuteSqlCommandAsync() के लिए काम समाप्त होता है यह है।

0

खाली IEnumerable<int> पास करते समय मुझे त्रुटि मिलती है लेकिन जब मैं खाली List<int> पास करता हूं तो यह ठीक काम करता है।

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