की कमी क्या है मैंने "सी # के साथ डीबी में विशाल डेटा डालने का सबसे अच्छा तरीका" के लिए कुछ शोध किया है, तो बहुत से लोगों ने मुझे बस SQLBulkCopy का उपयोग करने का सुझाव दिया है। मैंने कोशिश की और यह वास्तव में मुझे आश्चर्यचकित कर दिया। निस्संदेह, SqlBulkCopy बहुत तेज है। ऐसा लगता है कि SqlBulkCopy डेटा डालने का एक सही तरीका है (विशेष रूप से विशाल डेटा)। लेकिन हम हर समय इसका इस्तेमाल क्यों नहीं करते हैं। क्या SqlBulkCopy का उपयोग करने में कोई कमी है?SqlBulkCopy
उत्तर
दो कारण मैं के बारे में सोच सकते हैं:
- जहाँ तक मुझे पता है, यह सामान्य वर्कलोड का एक बहुत में Microsoft SQL सर्वर
- के लिए ही उपलब्ध है, तो आप ऐसा नहीं करते हैं थोक
insert
है, लेकिन कभी-कभीinsert
एसselect
एस औरupdate
एस के साथ इंटरमीक्स किया गया है। माइक्रोसॉफ्ट ने स्वयं कहा है किSqlBulkCopy
MSDN page पर, सामान्यinsert
इसके लिए अधिक कुशल है।
ध्यान दें कि यदि आप एक SqlBulkCopy
, एक सामान्य डालने के बराबर होने का कम से कम चाहते हैं आप इसे SqlBulkCopyOptions.CheckConstraints
पैरामीटर पारित करने के लिए होगा।
एसकब्लूल्ककॉपी ओरेकल वी 11 के लिए भी मौजूद है, लेकिन यह ओरेकल क्लाइंट स्थापित करते समय ओरेकल .NET असेंबली द्वारा प्रदान की जाती है। SqlBulkCopy क्लास को मूल रूप से लक्षित डेटाबेस इंजन के प्रदाता द्वारा एक-एक करके कार्यान्वित किया जाता है।
एक बड़ी कमी, हालांकि - बिल्कुल कोई त्रुटि रिपोर्टिंग नहीं है। यदि, उदाहरण के लिए, आपने डेटासेट में डेटा अपडेट किया है, तो उसे एडाप्टर के साथ डीबी पर वापस फ्लश कर रहे हैं, और एक गंभीर उल्लंघन (या कोई अन्य विफलता) है, अपराधी डेटारोस होगा .सर्सर सही पर सेट हैं, और आप कर सकते हैं इसे उठाए जाने पर अपने अपवाद संदेश में जोड़ें।
एसकब्लूल्ककॉपी के साथ, आपको बस त्रुटि का प्रकार मिलता है और यही वह है। गुड लक इसे डीबगिंग।
+1 पूरी तरह से सहमत हैं कि डिबगिंग है थोककॉपी के साथ एक मुद्दा। मेरे पास एक दृष्टिकोण है जिसे "deconstruct" करना है, बल्ककॉपी आदेशों को विफल करना और आखिरकार ब्लॉक में पंक्ति से पंक्ति डालना। इस तरह मैं अपनी त्रुटि रिपोर्टिंग के हिस्से के रूप में अपमानजनक डेटारो को इंगित कर सकता हूं। – Totero
मुझे पता चला कि त्रुटि रिपोर्टिंग के लिए व्यक्तिगत विफलताओं को वापस पाने का एक तरीका है, लेकिन इसमें एक रिकॉर्ड के पृष्ठों में थोक प्रति को पुनः सबमिट करना और फिर सभी अपवादों (अपराधी पंक्तियों के साथ) को पकड़ना और फेंकना शामिल है। यह सबसे कुशल नहीं है, लेकिन यह तब होता है जब कोई त्रुटि हुई, इसलिए यह बहुत खराब नहीं है। पूर्ण लेख के लिए यहां देखें: http://www.codeproject.com/Articles/387465/Retrieving-failed-records-after-an-SqlBulkCopy-exc –
- 1. SqlBulkCopy
- 2. SqlBulkCopy
- 3. sqlbulkcopy
- 4. SqlBulkCopy
- 5. ASP.Net SqlBulkCopy
- 6. टाइमआउट का समय SqlBulkCopy
- 7. SQLBulkCopy पंक्ति गणना पूर्ण
- 8. सूची से SqlBulkCopy <>
- 9. क्या SqlBulkCopy एक एसक्यूएल चयन
- 10. SqlBulkCopy काम नहीं कर रहा
- 11. SqlBulkCopy कैसे काम करता है
- 12. SqlBulkCopy गुड़ के रूप में धीमी
- 13. सी # थोक सम्मिलित SqlBulkCopy - अद्यतन मौजूद है
- 14. SQLBulkCopy के लिए कोई तरीका "मौजूद है या अपडेट करें"?
- 15. sqlbulkcopy - DBNull की अनुमति नहीं देता है। Value।?
- 16. स्तंभ नामों का सम्मान करने के लिए SqlBulkCopy प्राप्त करना
- 17. SQL सर्वर 2008 में SqlBulkCopy का उपयोग करने के लिए मुझे किस अनुमति की आवश्यकता है?
- 18. क्या सिस्टम का उपयोग करना संभव है। लेनदेन। SqlBulkCopy के साथ ट्रांसक्रिप्शनस्कोप?
- 19. क्या डेटाटेबल में डेटा को परिवर्तित किए बिना SqlBulkCopy का उपयोग करने का कोई तरीका है?
- 20. डेटाटेबल में बाइनरी डेटा (बाइट []) के साथ मैं SQLBulkCopy का उपयोग कैसे कर सकता हूं?
- 21. एक GUID प्राथमिक कुंजी और डिफ़ॉल्ट newsequentialid() के साथ एक तालिका पर SQLBulkCopy का उपयोग कैसे कर सकते हैं?
- 22. SqlBulkCopy का उपयोग करके, मैं एक गैर-डिफ़ॉल्ट डेटाबेस स्कीमा में किसी तालिका में डेटा कैसे सम्मिलित करूं?
- 23. इकाई मॉडल कनेक्शन स्ट्रिंग कैसे प्राप्त करें?
- 24. त्रुटि - वर्तमान कनेक्शन से जुड़े लेनदेन को पूरा कर लिया गया है लेकिन
- 25. SqlBulkCopyColumnMappingCollection का उपयोग कैसे करें?
- 26. ईएफ प्रतिस्पर्धा SaveChanges()
- 27. SqlBulkInsert - फायर ट्रिगर्स कैसे सेट करें, बाधाओं की जांच करें?
- 28. सी # अनुकूलन: डेटाबेस
- 29. हम Asp.net में एक्सेल आयात के लिए सर्वर में माइक्रोसॉफ्ट ऑफिस स्थापित करने की आवश्यकता है?
- 30. एसकब्लूल्ककॉपी
हाँ, SqlBulkCopy केवल एमएस एसक्यूएल सर्वर के साथ उपयोग किया जा सकता है। मुझे पता है कि यह केवल एक दोष है। कभी-कभी यह वास्तव में बड़ा सौदा नहीं है। उदाहरण के लिए: हमारे ग्राहक केवल एमएस एसक्यूएल सर्वर का उपयोग करते हैं और हम केवल सिस्टम.डाटा.क्लक्लिएंट नेमस्पेस से संबंधित कई वर्गों के साथ उनके लिए एप्लिकेशन बनाते हैं। –
डिफ़ॉल्ट रूप से 'SqlBulkCopyOptions.checkConstraints' झूठी क्यों है? - यह इतना उलझन में है! –
@ बररीके: नहीं, यह नहीं है। नाम 'थोक प्रतिलिपि' है, इसलिए आपको डेटा कॉपी करना चाहिए जिसके लिए बाधाएं पहले से ही सही होने के लिए जानी जाती हैं, यदि नहीं तो आप नहीं जानते कि आप क्या कर रहे हैं ... :) –