दिलचस्प पोस्ट
क्या आपको अपने <script> टैग में निर्दिष्ट पाठ / जावास्क्रिप्ट की आवश्यकता है? जावा में कुछ निर्दिष्ट समय सीमा के बाद धागा को मारना पायथन में अनबाउंडलोकल त्रुटि डेटा फ्रेम में कई स्तंभों के कारक के लिए संख्यात्मक से वर्ग को बदलें एक वैध फ़ाइल नाम में एक स्ट्रिंग चालू करें? यूनिक्स को टैब डेलिमिटर के साथ सॉर्ट करें फ़्लोटिंग प्वाइंट नंबर पर बिटवाइस ऑपरेशन कैसे करें I जावा में बेनामी (आंतरिक) वर्ग कैसे उपयोग किए जाते हैं? क्या मैं अनाम रूपों को XML के रूप में सीरियल कर सकता हूँ? एसवीएन: जीआईटी में बाह्य समकक्ष? शैल स्क्रिप्ट में exec कमांड के उपयोग क्या हैं? जब एचटीएमएल इकाइयों का इस्तेमाल किया जाना चाहिए मैं Windows पर चलने वाले PyQt ऐप में कंसोल विंडो को कैसे छिपा सकता / सकती हूं? एंड्रॉइड सूचीदृश्य पंक्ति हटाने एनीमेशन पाइपों के उपयोग से दो कार्यक्रमों के बीच एक साधारण स्ट्रिंग कैसे भेजनी है?

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