2012-04-18 11 views
5

में जोड़ा गया था मेरे पास एक कोड है जहां मैं एक तालिका में डेटा डालने का प्रयास करता हूं और नए तत्व के आईडी (ऑटो वृद्धि द्वारा दिया गया) वापस लौटाता हूं।ExecuteScalar() वापस शून्य पूर्ण डेटा डीबी

int newEquipmentID = new int(); 

query = database.ParameterizedQueryString("INSERT INTO Equipment (EquipmentTypeID) VALUES ({0})", "equipmenttypeID"); 

newEquipmentID = (int)database.Connection.ExecuteScalar(query, DefaultTimeout, equipment.EquipmentTypeID); 

लेकिन यह विफल रहता है और शून्य वापस आता है, जैसे कि नया आइटम अभी तक नहीं जोड़ा गया था। लेकिन वास्तव में मैं डीबी में एक साधारण परामर्श करने वाला नया आइटम देख सकता हूं।

मेरा प्रश्न है कि "कब" डेटा वास्तव में डीबी में जोड़ा जाता है और मैं नए जोड़े गए आइटम की आईडी कैसे प्राप्त कर सकता हूं। धन्यवाद!

उत्तर

11

आप नया रिकॉर्ड बना सकते हैं और नई पहचान मान प्राप्त करने के लिए दो प्रश्नों की जरूरत नहीं है होना चाहिए साइड-नोट: it's prone to errors के बाद से मैं डेटाबेस डेटाबेस का उपयोग नहीं करूंगा।

2

सिर्फ डाला पंक्ति आप इसे चयन करने की आवश्यकता की आईडी लौटने के लिए, क्योंकि ExecuteScalar() रिटर्न

परिणाम क्वेरी द्वारा रिटर्न सेट की पहली पंक्ति के पहले स्तंभ

और INSERT कुछ भी नहीं चुनता/वापस नहीं करता है।

insert ... 
select ... 

अधिक जानकारी के लिए @ टिम का उत्तर देखें।

+0

के लिए ... यही कारण है कि मैं ExecuteScalar() –

+0

ExecuteScalar() एक तत्व (शीर्ष पंक्ति बाएँ स्तंभ तत्व) –

+0

@abatischchev के पहले क्षेत्र देता है, तो ... –

1

आपकी SQL क्वेरी नव उत्पन्न आईडी वापस नहीं करती है।

  • <list of fields> स्तंभों की एक अल्पविराम से अलग सूची है जिसके लिए आप मान
  • क्षेत्रों की सूची की आपूर्ति करेगा प्रतिनिधित्व करता है: सावधान के बारे में होने

    INSERT INTO Equipment (<list of fields>) 
        OUTPUT inserted.EquipmentTypeID 
    VALUES (<list of values>) 
    

    कुछ बातें: इसे वापस करने के लिए, एक OUTPUT clause का उपयोग में ऑटो-वृद्धि आईडी कॉलम (जिसे स्वचालित रूप से एक मान असाइन किया जाएगा)

  • <list of values> मानों की अल्पविराम से अलग सूची का प्रतिनिधित्व करता है उपर्युक्त निर्दिष्ट क्षेत्रों में टोपी डाली जाएगी।

    using (var con = new SqlConnection(ConnectionString)) { 
        int newID; 
        var cmd = "INSERT INTO foo (column_name)VALUES (@Value);SELECT CAST(scope_identity() AS int)"; 
        using (var insertCommand = new SqlCommand(cmd, con)) { 
         insertCommand.Parameters.AddWithValue("@Value", "bar"); 
         con.Open(); 
         newID = (int)insertCommand.ExecuteScalar(); 
        } 
    } 
    

    : मानों की संख्या क्षेत्रों और डेटा प्रकार की संख्या के बराबर से मेल खाना चाहिए

0

आउटपुट क्लॉज आपको नए जोड़े गए आइटम की आईडी प्राप्त करने में मदद करेगा। अधिक जानकारी के लिए कृपया नीचे दिए गए लिंक को देखें:

here पर क्लिक करें! और अधिक विस्तार

निश्चित रूप से
संबंधित मुद्दे