2013-06-19 9 views
5

के लिए मैं SCOPE_IDENTITY का उपयोग करने की कोशिश कर रहा हूं ताकि डायनामिक पैरामीटर के लिए रिटर्नवैल्यू विकल्प का उपयोग करके सी # पर एक लंबी प्राथमिक कुंजी वापस कर सकें।डैपर "निर्दिष्ट कास्ट मान्य नहीं है।" ReturnValue पैरामीटर मान

var p = new DynamicParameters(); 
p.Add("@a", 11); 
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output); 
p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue); 

cnn.Execute("spMagicProc", p, commandType: commandType.StoredProcedure); 

int b = p.Get<int>("@b"); 
int c = p.Get<int>("@c"); 

इसके बजाय पूर्णांक लौटने की, मैं अपने प्राथमिक कुंजी क्षेत्र के रूप में निम्नलिखित

var p = new DynamicParameters(); 
p.Add("@a", 11); 
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output); 
p.Add("@c", dbType: DbType.Int64, direction: ParameterDirection.ReturnValue); 

cnn.Execute("spMagicProc", p, commandType: commandType.StoredProcedure); 

int b = p.Get<int>("@b"); 
int c = p.Get<long>("@c"); 

BigInt किया जाना चाहिए मेरी प्रोक में क्या करना पसंद करेंगे:

यहाँ डैप्पर वेबसाइट से नमूना कोड है , मैं "वापसी SCOPE_IDENTITY()" का उपयोग कर रहा हूं।

हालांकि ऐसा करने के परिणामस्वरूप "निर्दिष्ट कास्ट मान्य नहीं है।" अपवाद।

+0

आप स्पष्ट कर सकते हैं: इस dapper.rainbow है? इसके अलावा: आप कहते हैं कि क्षेत्र "बड़ा" है - संभवतः अब .net पक्ष के बारे में ले रहा है। यहां, क्या आपका मतलब 'बिगइंटर' है? या क्या आपका मतलब Int64 उर्फ ​​'लंबा' है? सी # –

+0

डैपर माइक्रो-ओआरएम (एक्सटेंशन) में एसक्यूएल सर्वर का बड़ा नक्शा 'लांग' तक। जब मैं बिगिनट का संदर्भ देता हूं, तो मैं उस तालिका के लिए प्राथमिक कुंजी फ़ील्ड के बारे में बात कर रहा हूं जिसे मैं सहेज रहा हूं। जब मैं लंबे समय तक संदर्भित करता हूं कि .net वेरिएबल मैं लिखने की कोशिश कर रहा हूं। – user1790300

उत्तर

6

संग्रहीत प्रक्रिया से वापसी मूल्य हमेशा पूर्णांक होता है, यानी int। इस प्रकार, आप केवल को एक पूर्णांक के रूप में देख सकते हैं। यदि आप इसे long के रूप में अनबॉक्स करने का प्रयास करते हैं, तो यह असफल हो जाएगा।

विकल्प:

  • यदि मान फिट होगा, बस नेट पक्ष में int के रूप में यह इलाज
  • अन्यथा प्रकार bigint के out पैरामीटर का उपयोग, और नेट की ओर long के रूप में यह इलाज
  • या का उपयोग select और Query<long>(...).Single()
2

यदि मुझे सही याद है, तो SCOPE_IDENTITY() एक दशमलव (http://msdn.microsoft.com/en-us/library/ms190315.aspx) देता है, इसलिए अमान्य कास्ट अपवाद।

आपको इसे काम करने के लिए इसे बड़े (एसक्यूएल में) में डालने की आवश्यकता है।

+0

या संभवतः इस मामले में 'bigint', चूंकि ओपी' ' –

+0

का उपयोग कर रहा है, इस वापसी कास्ट (SCOPE_IDENTITY() AS Bigint) की कोशिश की है और यह अभी भी असफल रहा है। – user1790300

+0

@ विवेक ने कोशिश नहीं की? – Kiquenet

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