दिलचस्प पोस्ट
प्लस चिन्ह '+ नई तिथि' में क्या होता है सी # में ToUpper () और ToUpperInvariant () के बीच अंतर क्या है? WCF REST सेवा के लिए डिफ़ॉल्ट सीरियल किज़र के रूप में जेसन.नेट सेट कैसे करें इंटरफेस, एकाधिक वंशानुक्रम बनाम इंटरफेस, इंटरफेस के लाभ का उपयोग क्यों करना है? एंड्रॉइड 5.0 – हेडर / पादलेख को रीसाइक्लेअर वीव में जोड़ें Chrome विस्तार में JSON प्राप्त करें सी में मानक डेटा संरचना पुस्तकालय? Google App Engine में मॉडल के लिए मैं एक अनूठी संपत्ति कैसे परिभाषित करूं? क्या यह जांचने का एक तरीका है कि दो संग्रह में एक समान तत्व होते हैं, जो ऑर्डर से स्वतंत्र है? WPF WebBrowser नियंत्रण – स्थिति: स्क्रॉलिंग के दौरान तय तत्व कूदता (विंडोज 8) कैसे दो बिटमैप को एक से दूसरे पर मर्ज करने के लिए मैं jQuery के माध्यम से एक एंकर क्लिक कैसे अनुकरण कर सकता हूं? Matplotlib भूखंड: धुरी, किंवदंतियों और सफेद रिक्त स्थान को हटाने मैं निकटतम एक्स मिनट में समय कैसे बढ़ा सकता हूं? एचटीएमएलएफ़ फ़ाइल एपीआई पाठ और बाइनरी के रूप में पढ़ा जाता है

SqlDataAdapter बनाम SqlDataReader

एक DB से डेटा प्राप्त करने के लिए SqlDataAdapter बनाम SqlDataReader का उपयोग करने के बीच अंतर क्या हैं?

मैं विशेष रूप से उनके पेशेवरों और विपक्षों के साथ ही उनकी गति और स्मृति प्रदर्शनों में भी देख रहा हूं।

धन्यवाद

Solutions Collecting From Web of "SqlDataAdapter बनाम SqlDataReader"

SqlDataReader:

  • जब तक आप समाप्त नहीं हो जाते तब तक कनेक्शन खुले रखता है (इसे बंद करने के लिए मत भूलना!)।
  • आमतौर पर केवल एक बार में दोहराया जा सकता है
  • डेटाबेस में वापस अपडेट करने के लिए उपयोगी नहीं है

दूसरी ओर, यह:

  • संपूर्ण परिणाम सेट के बजाय एक बार में केवल एक बार स्मृति में एक रिकार्ड है (यह बहुत बड़ा हो सकता है)
  • के बारे में के रूप में तेजी से है कि आप उस एक यात्रा के लिए मिल सकता है
  • आपको जल्दी से परिणाम प्रसंस्करण शुरू करने की अनुमति देता है

SqlDataAdapter / डेटासेट

  • आप कनेक्शन को बंद कर देते हैं जैसे ही यह डेटा लोड करना हो, और यह आपके लिए स्वचालित रूप से बंद कर सकता है
  • मेमोरी में सभी परिणाम उपलब्ध हैं
  • आप जितनी बार आपको आवश्यकता होती है, या फिर इंडेक्स द्वारा एक विशिष्ट रिकॉर्ड को देखने के लिए इसे फिर से दोहरा सकते हैं
  • डेटाबेस में वापस अपडेट करने के लिए कुछ अंतर्निहित संकायों हैं

की कीमत पर:

  • बहुत अधिक मेमोरी उपयोग
  • आप तब तक इंतजार करते हैं जब तक कि इसका उपयोग करने से पहले सभी डेटा लोड हो जाए

तो वास्तव में यह आप पर निर्भर करता है कि आप क्या कर रहे हैं, लेकिन मैं एक डेटारडर को पसंद करने के लिए करते हैं जब तक कि मुझे कुछ चाहिए जो केवल एक डेटासेट द्वारा समर्थित नहीं है। SqlDataReader केवल पढ़ने के लिए ग्रिड के लिए बाइंडिंग के सामान्य डेटा एक्सेस केस के लिए एकदम सही है।

इसका जवाब काफी व्यापक हो सकता है

मूलतः, मेरे लिए बड़ा अंतर जो आमतौर पर उपयोग करने के लिए मेरे फैसले को प्रभावित करता है, यह है कि SQLDataReader के साथ, आप डेटाबेस से "स्ट्रीमिंग" डेटा हैं SQLDataAdapter के साथ, आप डेटाबेस से एक ऑब्जेक्ट में डेटा निकाल रहे हैं जो स्वयं को और भी पूछे जा सकते हैं, साथ ही साथ सीआरयूड ऑपरेशंस को भी प्रदर्शन कर सकते हैं।

जाहिर है डेटा की एक धारा के साथ SQLDataReader बहुत तेज है, लेकिन आप केवल एक समय में एक रिकॉर्ड की प्रक्रिया कर सकते हैं। SQLDataAdapter के साथ, आपके कोड के साथ काम करने / पास होने के लिए डेटाबेस से आपकी क्वेरी में मिलान की पंक्तियों का एक पूरा संग्रह है।

चेतावनी: यदि आप SQLDataReader का उपयोग कर रहे हैं, तो हमेशा, हमेशा, सुनिश्चित करें कि आप कनेक्शन को बंद करने के लिए उचित कोड लिखते हैं, क्योंकि आप SQLDataReader के साथ कनेक्शन खोल रहे हैं। ऐसा करने में विफलता, या परिणाम को संसाधित करने में त्रुटि के मामले में कनेक्शन को बंद करने के लिए उचित त्रुटि संभाल करने से आपका आवेदन कनेक्शन लीक के साथ CRIPPLE होगा।

मेरी VB को माफ़ करें, लेकिन यह एक न्यूनतम मात्रा का कोड है जो आपको SqlDataReader का उपयोग करते समय होना चाहिए:

Using cn As New SqlConnection("..."), _ cmd As New SqlCommand("...", cn) cn.Open() Using rdr As SqlDataReader = cmd.ExecuteReader() While rdr.Read() ''# ... End While End Using End Using 

समकक्ष सी #:

 using (var cn = new SqlConnection("...")) using (var cmd = new SqlCommand("...")) { cn.Open(); using(var rdr = cmd.ExecuteReader()) { while(rdr.Read()) { //... } } } 

एक SqlDataAdapter आमतौर पर एक डाटासेट या डाटाटेबल भरने के लिए उपयोग किया जाता है और इसलिए आपके कनेक्शन बंद होने के बाद आपको डेटा तक पहुंच प्राप्त होगी (डिस्कनेक्ट किया गया प्रवेश)।

SqlDataReader एक तेज़ अग्रेषित-केवल और कनेक्टेड कर्सर है जो डेटासेट / डेटाटाबल को भरने से आम तौर पर तेज हो जाता है।

इसके अलावा, एक SqlDataReader के साथ, आप एक समय में अपने डेटा को एक रिकॉर्ड के साथ सौंपते हैं, और मेमोरी में कोई डेटा नहीं रखते हैं। जाहिर है एक DataTable या DataSet के साथ, आपके पास स्मृति आवंटन ओवरहेड है।

यदि आपको अपने डेटा को मेमोरी में रखने की आवश्यकता नहीं है, इसलिए केवल सामान प्रदान करने के लिए, SqlDataReader के लिए जाएं यदि आप डिस्कनेक्ट फैशन में अपने डेटा से निपटना चाहते हैं, तो डेटाएडैप्टर या डेटाटाइल को भरने के लिए चुनें।

डेटाबेस से एक इन-मेमरी डेटासेट / डेटाटाबल को पॉप्युलेट करने के लिए एक SqlDataAdapter का उपयोग करें। आपके पास कनेक्शन को बंद करने / निपटान करने के लिए लचीलापन है, स्मृति में चारों ओर सेट / सेट करें आप फिर डेटा को हेरफेर कर सकते हैं और इसे डाइबर्ट में डेटा एडाप्टर का उपयोग करते हुए, InsertCommand / UpdateCommand के साथ संयोजन में वापस कर सकते हैं।

लचीलेपन की आवश्यकता के बिना तेजी से, निम्न-स्मृति पदचिह्न डेटा पहुंच चाहते समय एक SqlDataReader का उपयोग करें, उदाहरण के लिए आपके व्यवसाय तर्क के आसपास डेटा पास करना। यह बड़े डेटा संस्करणों की त्वरित, कम-स्मृति उपयोग की पुनःप्राप्ति के लिए और अधिक अनुकूल है क्योंकि यह सभी डेटा को एक बार में स्मृति में लोड नहीं करता है – SqlDataAdapter दृष्टिकोण के साथ, डेटासेट / डेटाटाले सभी डेटा से भर जाएगा, इसलिए यदि वहाँ बहुत सी पंक्तियां और स्तंभ हैं, जिससे कि बहुत सारी मेमोरी को पकड़ने की आवश्यकता होगी