2010-09-12 5 views
8

मैं बस सोच रहा हूं कि डेटाबेस से डेटा लाने में डेटारिएडर और डेटा एडाप्टर का उपयोग करते समय मुझे क्या विचार करना चाहिए और इस दो अन्य लोगों के बीच क्या अंतर है, खुले कनेक्शन की आवश्यकता है और डेटाडाप्टर नहीं है ... हमारी परियोजनाओं में, हमारे सभी डीएएल में डेटा रीडर का उपयोग कर रहे थे, हम कभी भी डेटा एडाप्टर का उपयोग नहीं करते थे। तो मैं सोच रहा हूं कि DataReader का उपयोग करने से डेटाएडाप्टर + डेटाटेबल कॉम्बो का उपयोग करना बेहतर होगा। अग्रिम में धन्यवाद।ADO.NET प्रश्न: डेटा रीडर का उपयोग करने के लिए, डेटा एडाप्टर

उत्तर

3

मैं ADO.NET सामान करते समय लगभग हमेशा डेटा रीडर का पक्ष लेता हूं; कारण यह है कि यह आपको क्लाइंट पर डेटा को आपके इच्छित होने से पहले स्टोर करने के लिए मजबूर नहीं करता है।

यह कुछ हद तक जवाब है कि DataAdapter को डेटासेट/तालिका में कब उपयोग करना है; जब आप क्लाइंट पर डेटा स्टोर करना चाहते हैं, तो शायद इसके साथ काम करने के लिए - इसके माध्यम से आगे बढ़ना, या एक सेट के रूप में इसे ऑपरेट करना, क्योंकि ग्रिड में मूल्यों को आउटपुट करने के विरोध में, जहां रीडर, आईएमओ, एक बेहतर विकल्प है।

7

डेटा रीडर: यह सबसे अच्छा उपयोग किया जाता है जब आप केवल रीडनी मोड में डेटा लाने, अपनी व्यावसायिक इकाई को पॉप्युलेट करना और पाठक को बंद करना चाहते हैं। यह वास्तव में तेज़ है।

कहते हैं लगता है, आप एक ग्राहक वर्ग कर रहे हैं और आप अपने सभी ग्राहकों के गुण की तरह भरा के साथ पूरी तरह initilized वस्तु करना चाहते हैं (नाम, पता आदि ..)

आप DataReader यहाँ का उपयोग करेगा और बस इकाई को पॉप्युलेट और करीबी पाठक।

आप डेटारेडर के साथ अपडेट नहीं कर सकते हैं।

डेटा एडाप्टर: आप डेटा एडाप्टर के साथ डेटा को पढ़/अपडेट कर सकते हैं लेकिन डाटारडर डेटा को पढ़ने पर यह तेज़ तेज़ है।

आप DataAdapter साथ डेटा अद्यतन कर सकते हैं लेकिन पाठक के साथ नहीं होगा

1

क्या बातें मैं जब DataReader और DataAdapter उपयोग करने पर विचार करने के लिए है

DataReader: अच्छी निम्न स्तर इंटरफ़ेस। PRetty केवल एकमात्र इंटरफ़ेस - यदि आप उच्चतर संरचनाओं में डेटा लोड करते हैं, तो वास्तविक लोड हमेशा डेटा रीडर का उपयोग करके किया जाता है।

डेटा एडाप्टर/डेटासेट: सामग्री उन लोगों द्वारा उपयोग नहीं की जाती है जो संरचित पी rograms और अच्छा कोड पसंद करते हैं और एक रिपोर्टिंग applcation लिखने के लिए नहीं होता है। इसके बजाय एक ओआरएम का उपयोग करें - NHipernate (अच्छा), Linq2SQL (खराब), इकाई फ्रेमवर्क (खराब) या अन्य बेहतर abstractions में से एक।

3

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

DataAdapter कुछ और है, यह आपको स्मृति में डेटा रिकॉर्ड करने में सक्षम है। इससे आप डेटा ब्राउज़ करने, डेटा संपादित करने आदि के लिए जीयूआई बनाने की अनुमति देते हैं .. यह अधिक सामान्य है लेकिन बड़े डेटा सेट के साथ अच्छी तरह से काम नहीं करेगा।

+0

के साथ काम कर रहा है डेटा एडाप्टर में एक अच्छा विकल्प हो सकता है डेटाबेस में लाखों रिकॉर्ड डंप करने का मामला (उदाहरण के लिए: मेरे लाखों रिकॉर्ड जो मेरे डेटाटेबल में हैं) डेटाबेस में ??? –

3

जब आप डेटासेट का उपयोग करते हैं तो आप केवल डेटाएडाप्टर का उपयोग करना चाहते हैं।
एक एडाप्टर में डेटासेट को पढ़ने और लिखने के लिए 2 मुख्य विधियों Fill() और Updater() हैं।

ध्यान दें कि Fill() एक कनेक्शन खोल देगा, सभी रिकॉर्ड प्राप्त करने के लिए डेटा रीडर का उपयोग करें और फिर Connetion को बंद करें।

डेटासेट और डेटाटेबल्स के बिना आपके पास डेटाएडाप्टर के लिए उपयोग नहीं है।

तो असली सवाल यह है कि: आप अपने डीएएल में किस प्रकार के स्टोरेज क्लासेस का उपयोग करना चाहते हैं? डेटासेट व्यवहार्य और सरल हैं लेकिन यह एक बुढ़ापे की तकनीक है (अब सुधार नहीं हुआ)।

शायद आपको एक ओआरएम (ऑब्जेक्ट रिलेशनल मैपिंग) लाइब्रेरी के लिए देखना चाहिए। लेकिन यह आपके डेटा रीडर/एडाप्टर प्रश्न को एक और अधिक जटिल पसंद के साथ बदल देगा।

+0

डाटाबेस में लाखों रिकॉर्ड डंप करने के मामले में डेटा डैपटर एक अच्छा विकल्प हो सकता है (उदाहरण: मेरे डेटाटेबल में 2-3 लाख रिकॉर्ड जो डेटाबेस में हैं ??? –

+2

बस कोशिश करें, इसमें शामिल कई कारक हैं। साथ ही, टिप्पणियों में प्रश्न न पूछें, यह एक मंच नहीं है। मौजूदा के लिए देखो और अन्यथा पूछें बटन का उपयोग करें। –

+0

क्या आप कृपया इस प्रश्न के साथ मेरी सहायता कर सकते हैं: http://stackoverflow.com/questions/37970073/getting-error-while-inserting-datatables-records-in-my-database-table –

2

I कभी भी डेटा रीडर का उपयोग करें।

चूंकि मैं दृढ़ता से अपने आवेदन को लेता हूं, मेरा डीएएल डेटाबेस से बात करने के लिए ज़िम्मेदार है और मेरा बीएलएल ऑब्जेक्ट्स बनाने के लिए ज़िम्मेदार है, बीएलएल डेटाटाइडर को बंद होने पर बंद करने का कोई तरीका नहीं है। इसके बजाय बीएलएल डीएएल से डेटासेट/डेटाटेबल का अनुरोध करता है, जिसे डीएएल पूरा करता है। यह ऐसा करने से करता है (टॉमटॉम के बिंदु पर> स्टैक ट्रेस को देखो और हां, आप वहां एक डेटा रीडर देखेंगे)। बीएलएल तब परिणाम सेट के साथ पसंद करता है।

+0

-1: यह उत्तर नहीं देता है प्रश्न। ओपी ने डेटा रीडर और डेटा एडाप्टर के विकल्पों के लिए नहीं पूछा था। –

+1

मैं असहमत हूं: उन्होंने पूछा, "DataReader का उपयोग करने के बजाय डेटाएडाप्टर + डेटाटेबल कॉम्बो का उपयोग करने के लिए कौन सा परिदृश्य बेहतर होगा" और मैंने चीजों को डिजाइन करने के तरीके का विवरण देकर उत्तर दिया (या कम से कम चर्चा में योगदान दिया)। यदि मैंने जो डिज़ाइन वर्णित किया है, उसके अनुप्रयोग की तरह लगता है, तो DataReader पर DataAdapter का उपयोग करने के लिए मेरा सुझाव मान्य होगा। वैसे, मैं डेटा रीडर को पू-पू नहीं कर रहा हूं। मैं व्यक्तिगत रूप से इसका उपयोग करने का कोई कारण नहीं था जब तक कि मैं प्रस्तुति परत से डेटाबेस को कॉल नहीं कर रहा हूं, जो मैं नहीं करता हूं। कृपया अपने डाउन-वोट पर पुनर्विचार करें। – Brad

0

मैं इस सवाल सिर्फ proc और विपक्ष के बारे में बात करने के लिए लगता है, और कोड पक्ष बंद किया जा रहा

* डेटा रीडर डाटा लाने में DataAdapter की तुलना में बहुत तेजी से होता है, लेकिन आप यह जानना चाहेंगे कि डिस्कनेक्ट मोड

क्या है * डेटा रीडर या कनेक्टेड मोड और डेटा एडाप्टर डिस्कनेक्ट मोड का उपयोग उसी परिदृश्य में किया जा रहा है लेकिन कुछ बार डिस्कनेक्ट मोड आपके डेटा का एक तरीका है

* लेकिन डिस्कनेक्टिओड मोड डेटा एडेप्टर जैसे समृद्ध एपीआई के साथ प्रदान किया जाता है , डेटाव्यू, डेटाटेबल और डेटासेट। शक्तिशाली बात यह है कि आप बस अपने डेटा एडाप्टर को SELECT, INSERT, UPDATE, DELETE कमांड के साथ प्रदान करते हैं, कोड एडाप्टर की एक पंक्ति के साथ एकल तालिका या एकाधिक तालिकाओं से डेटा संलग्न करें। भरें (डेटाटेबल) या एडाप्टर। भरें (डेटासेट), और डेटा एडाप्टर अपडेट करने के साथ एक ही तरीका। अद्यतन (डेटाटेबल)

* डिस्कनेक्ट मोड में पदानुक्रमित डेटा को अपडेट करने से कनेक्ट मोड में काम करने से कहीं बेहतर है, जिसे अतिरिक्त कोड और अतिरिक्त तर्क का उपयोग करना है, डिस्कनेक्ट मोड में आपके पास क्षमता है बगल में अद्यतन करने के आपरेशन डॉट नेट लेन-देन Adapter.Update अंदर लपेटा जाता है केवल पंक्तियाँ सम्मिलित किया गया या अपडेट किया गया पंक्तियों या नष्ट कर दिया गया पंक्तियाँ अद्यतन करने के लिए (DataTable.Select ("", "", DataViewRowState.Added))

* कट मोड आप मिल गया में क्षमता वी प्राप्त करें आपके डेटा में प्रत्येक पंक्ति के बदलाव, इसके अलावा आप अपने डेटा डेटा में परिवर्तन कर सकते हैं। GetChanges()

* डिस्कनेक्टेड मोड आपको दृढ़ता से टाइप किया गयाडेटाडेटा प्रदान करता है, इसलिए आपको अपनी डेटा परिभाषा स्कीमा और संबंध मिलते हैं, आप माता-पिता को प्राप्त कर सकते हैं और बाल पंक्तियां

* डिस्कनेक्टेड मोड प्राथमिक कुंजी द्वारा पंक्तियां प्राप्त करने के लिए विधि प्रदान करता है, विशिष्ट मानदंड डेटाटेबल के साथ पंक्तियां भी प्राप्त करता है।चुनें ("फ़िल्टरएक्सप्रेस", "सॉर्टऑर्डर", डेटारोव व्यूस्टेट)

* आप डेटाटेबल पर गणना कर सकते हैं और अपने सर्वर को चुनिंदा उत्पाद आईडी, उत्पाद नाम, मूल्य, मात्रा, मूल्य * मात्रा के रूप में गणना के साथ परेशान नहीं कर सकते हैं, आप कर सकते हैं * यदि आप एकत्रित करने या अपने छीन लिया DataTable, DataTable.Compute कर सकते हैं आसानी से विशिष्ट मानदंडों (मूल्य * मात्रा)

साथ स्तंभ जोड़ने ("योग (कीमत)", "कीमत> 250")

* डिस्कनेक्ट किया मोड में आपके पास कमांडबिल्डर है जो यह आपके लिए sqlcommands बनाता है, लेकिन यह केवल एकल तालिका

संबंधित मुद्दे