दिलचस्प पोस्ट
उड़ी से बिटमैप कैसे प्राप्त करें? फैक्ट्री नहीं मिल सका: javax.faces.context.FacesContextFactory मैन्टिसा और एक्सपोनेंट को डबल में सी # स्क्रीन के शीर्ष पर एक डिवेल स्टिक को कैसे स्क्रॉल किया जा सकता है? साहचर्य सरणी कुंजी की एक सूची प्राप्त करना जेएसटीएल सी: जेएसपी पेज पर ईकाई काम नहीं कर रहा है Jquery – अनचाहे प्रकार त्रुटि: '324' में खोजने के लिए 'इन' ऑपरेटर का उपयोग नहीं किया जा सकता JQGrid कस्टम छंटनी शब्दकोशों में आदेश और मनमाना क्यों सेट है? प्रतिनिधियों का उद्देश्य एंड्रॉइड ओपनजीएल ईएस 2.0 एमुलेटर एक स्प्रिंग एमवीसी नियंत्रक से मॉडल एट्रिब्यूट्स को कैसे दूसरे नियंत्रक तक पहुंचाएं? कोड-पहले DbContext को कनेक्शन स्ट्रिंग पास करें PHP का उपयोग करके सीएसआरएफ टोकन को ठीक से कैसे जोड़ सकते हैं जावा वेबपैड में मैं अपने सर्वर पर एक छवि को कैसे सहेज और पुनः प्राप्त करता हूं

SqlDataAdapter बनाम SqlDataReader

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

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

धन्यवाद

वेब के समाधान से एकत्रित समाधान "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 दृष्टिकोण के साथ, डेटासेट / डेटाटाले सभी डेटा से भर जाएगा, इसलिए यदि वहाँ बहुत सी पंक्तियां और स्तंभ हैं, जिससे कि बहुत सारी मेमोरी को पकड़ने की आवश्यकता होगी