ExecuteScalar, ExecuteReader और ExecuteNonQuery के बीच अंतर क्या है?


106

जब हम इन तीनों का उपयोग करते हैं तो अलग-अलग मामले क्या हैं? मुझे एक का उपयोग कहां करना चाहिए और कहां नहीं करना चाहिए?


1
मुझे यह शानदार लेख उसी पर मिला: webblogsforyou.com/…
immayankmodi

जवाबों:


190
  • ExecuteScalarआमतौर पर इसका उपयोग तब किया जाता है जब आपकी क्वेरी एकल मान लौटाती है। यदि यह अधिक वापस आता है, तो परिणाम पहली पंक्ति का पहला कॉलम है। एक उदाहरण हो सकता है SELECT @@IDENTITY AS 'Identity'
  • ExecuteReaderकई पंक्तियों / स्तंभों (जैसे, SELECT col1, col2 from sometable) के साथ सेट किए गए किसी भी परिणाम के लिए उपयोग किया जाता है ।
  • ExecuteNonQuery आम तौर पर परिणाम के बिना SQL बयान के लिए प्रयोग किया जाता है (जैसे, अद्यतन, INSERT, आदि)।

39
ExecuteNonQueryप्रभावित पंक्तियों की संख्या वापस कर सकते हैं।
संग्राम नंदखिले

मुझे लगा कि ExecuteNonQuery का उपयोग तब किया जाता है जब आपको संग्रहीत प्रक्रियाओं को कॉल करने की आवश्यकता होती है जो तालिकाओं के संग्रह को वापस कर देंगे।
गोगुत्ज़

यदि आप संग्रहीत कार्यविधि में विवरणी देते हैं, तो ExecuteNonQuery भी काम करता है। stackoverflow.com/questions/6210027/…
FrenkyB

40

प्रश्न नहीं पूछो():

  1. केवल एक्शन क्वेरी के साथ काम करेंगे (क्रिएट, ऑल्टर, ड्रॉप, इंसर्ट, अपडेट, डिलीट)।
  2. क्वेरी द्वारा प्रभावित पंक्तियों की गिनती लौटाता है।
  3. रिटर्न प्रकार इंट है
  4. रिटर्न वैल्यू वैकल्पिक है और इसे एक पूर्णांक चर में सौंपा जा सकता है।

ExecuteReader ():

  1. एक्शन और नॉन-एक्शन क्वेरी के साथ काम करेंगे (चुनें)
  2. क्वेरी द्वारा चयनित पंक्तियों का संग्रह लौटाता है।
  3. वापसी प्रकार DataReader है।
  4. रिटर्न वैल्यू अनिवार्य है और इसे किसी अन्य ऑब्जेक्ट DataReader को सौंपा जाना चाहिए।

ExecuteScalar ():

  1. गैर-क्रिया क्वेरी के साथ काम करेंगे जिसमें कुल कार्य होते हैं।
  2. क्वेरी परिणाम की पहली पंक्ति और पहला कॉलम मान लौटाएं।
  3. वापसी प्रकार वस्तु है।
  4. वापसी मूल्य अनिवार्य है और इसे आवश्यक प्रकार के एक चर को सौंपा जाना चाहिए।

संदर्भ URL:

http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html


38

प्रत्येक एक अलग प्रकार का निष्पादन है।

  • ExecuteScalar क्वेरी का प्रकार होने जा रहा है जो एकल मान लौटाएगा।

    एक उदाहरण डालने के बाद एक जेनरेट की गई आईडी को लौटाया जाएगा।

    INSERT INTO my_profile (Address) VALUES ('123 Fake St.'); SELECT CAST(scope_identity() AS int)

  • ExecuteReader आपको एक डेटा रीडर देता है जो आपको एक बार में सभी परिणामों के कॉलम पढ़ने की अनुमति देगा।

    एक उदाहरण एक या अधिक उपयोगकर्ताओं के लिए प्रोफ़ाइल जानकारी खींच रहा होगा।

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery किसी भी SQL है जो मानों को वापस नहीं कर रहा है, लेकिन वास्तव में कुछ फॉर्म का काम कर रहा है जैसे कुछ हटाना या संशोधित करना।

    एक उदाहरण डेटाबेस में एक उपयोगकर्ता की प्रोफ़ाइल को अपडेट कर रहा होगा।

    UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'


1
ऐसा लगता है कि आप ExecuteSeader दोनों ExecuteScalar & ExecuteNonQuery द्वारा किए गए कार्यों को करने के लिए उपयोग कर सकते हैं, इसलिए अन्य दो का उपयोग क्यों करें? किसी भी प्रदर्शन लाभ?
user20358

ExecuteReader के अति प्रयोग से बचने का एक कारण यह है कि जब तक आप इसके साथ काम नहीं करेंगे तब तक यह उस पाठक को इधर-उधर रखेगा। इन सभी के साथ, आप कुछ विशेष जानकारी जानना चाहते हैं कि वे सबसे प्रभावी ढंग से उपयोग करने के लिए कैसे काम करते हैं। मैंने यहां जो कुछ बताया है, वे कुछ अच्छे दिशानिर्देश हैं।
ब्रेंडन एनरिक

9

डॉक्स से (नोट: जब आप जानना चाहते हैं कि MSDN एक आसान संसाधन है तो आप क्या करते हैं!)

ExecuteScalar

डेटाबेस से एकल मान (उदाहरण के लिए, कुल मान) प्राप्त करने के लिए ExecuteScalar विधि का उपयोग करें। इसके लिए ExecuteReader विधि का उपयोग करने की तुलना में कम कोड की आवश्यकता होती है, और फिर SqlDataReader द्वारा दिए गए डेटा का उपयोग करके एकल मान उत्पन्न करने के लिए आवश्यक संचालन करना।

ExecuteReader

कनेक्शन के लिए CommandText भेजता है और एक SqlDataReader बनाता है।

... और SqlDataReader से ...

SQL सर्वर डेटाबेस से पंक्तियों की आगे-केवल स्ट्रीम पढ़ने का एक तरीका प्रदान करता है। इस वर्ग को विरासत नहीं बनाया जा सकता।

प्रश्न नहीं पूछो

आप ExecuteNonQuery का उपयोग कैटलॉग ऑपरेशंस (उदाहरण के लिए, डेटाबेस की संरचना को क्वेरी करने या टेबल्स जैसे डेटाबेस ऑब्जेक्ट्स बनाने के लिए) का उपयोग कर सकते हैं, या डेटासेट का उपयोग किए बिना डेटाबेस में डेटा को बदलने के लिए UPDATE, INSERT, या DELETE स्टेटमेंट्स निष्पादित करके कर सकते हैं।


8

दूसरों ने जो पोस्ट किया है उसे जोड़ने के लिए:

ExecuteScalar वैचारिक रूप से क्वेरी से परिणामी की पहली पंक्ति से बाएं कॉलम को लौटाता है; आप कर्मचारियों से एक चयन * निष्पादित कर सकते हैं, लेकिन आप केवल उन पंक्तियों की पहली सेल प्राप्त करेंगे जो आमतौर पर उन प्रश्नों के लिए उपयोग की जाती हैं जो एकल मान लौटाते हैं। मैं नहीं 100% यकीन है कि SQLServer के बारे में कर रहा हूँ, लेकिन Oracle में, आप wouldnt एक समारोह (एक डेटाबेस कोड है कि रिटर्न एकल मान) को चलाने के लिए इसका इस्तेमाल करते हैं और यह आपको समारोह भले ही कार्यों एकल मान के रिटर्न मान देने के लिए उम्मीद है। हालाँकि, यदि आप फ़ंक्शन को क्वेरी के भाग के रूप में चला रहे हैं, जैसे SELECT SUBSTR ('abc', 1, 1) DUAL से तो यह इस तथ्य के आधार पर रिटर्न वैल्यू देगा कि रिटर्न वैल्यू को सबसे ऊपरी भाग में संग्रहीत किया गया है परिणामी रोसेट का सेल

ExecuteNonQuery डेटाबेस संग्रहीत कार्यविधियाँ, फ़ंक्शन और क्वेरीज़ जो डेटा को संशोधित करने के लिए उपयोग किया जाएगा (INSERT / UPDATE / DELETE) या डेटाबेस संरचना को संशोधित करें (क्रिएट टेबल ...)। आमतौर पर कॉल का रिटर्न वैल्यू इस बात का संकेत है कि ऑपरेशन से कितनी पंक्तियाँ प्रभावित हुई थीं लेकिन इसकी गारंटी के लिए DB डॉक्यूमेंट की जाँच करें


4

ExecuteReader() SQL प्रदाता निष्पादित करता है जो डेटा प्रदाता DBDataReader ऑब्जेक्ट को लौटाता है जो केवल आगे प्रदान करता है और क्वेरी के परिणाम के लिए केवल एक्सेस पढ़ता है।

ExecuteScalar()एक ExecuteReader()विधि के समान है जिसे सिंगलटन क्वेरी के लिए डिज़ाइन किया गया है जैसे कि रिकॉर्ड गणना प्राप्त करना।

ExecuteNonQuery() गैर क्वेरी निष्पादित करें जो बनाने, हटाने, अद्यतन, सम्मिलित करने के साथ काम करता है)


3

प्रश्न नहीं पूछो

इस ExecuteNonQuery पद्धति का उपयोग केवल सम्मिलित करने, अद्यतन करने और हटाने, बनाने और कथन सेट करने के लिए किया जाएगा। ExecuteNonQuery विधि INSERT, DELETE या UPDATE कार्रवाई से प्रभावित पंक्तियों की संख्या लौटाएगी।

ExecuteScalar

यह डेटाबेस से एकल मान प्राप्त करने के लिए बहुत तेज़ है। Execute Scalar कमांड ऑब्जेक्ट का उपयोग करके SQL Query या Stored प्रक्रिया के निष्पादन पर सिंगल रो सिंगल कॉलम वैल्यू यानी सिंगल वैल्यू लौटाएगा। ExecuteReader

SQL ऑब्जेक्ट या कमांड ऑब्जेक्ट का उपयोग करके संग्रहीत कार्यविधि के निष्पादन पर पंक्तियों के सेट को वापस करने के लिए Execute Reader का उपयोग किया जाएगा। यह केवल अभिलेखों की पुनर्प्राप्ति के लिए आगे है और इसका उपयोग तालिका मानों को पहली से आखिरी तक पढ़ने के लिए किया जाता है।


3

ExecuteNonQuery विधि INSERT, DELETE या UPDATE कार्रवाई से प्रभावित पंक्तियों की संख्या लौटाएगी। इस ExecuteNonQuery पद्धति का उपयोग केवल सम्मिलित करने, अद्यतन करने और हटाने, बनाने और कथन सेट करने के लिए किया जाएगा। (अधिक पढ़ें)

ExecuteScalar कमांड ऑब्जेक्ट का उपयोग करते हुए SQL क्वेरी या संग्रहीत प्रक्रिया के निष्पादन पर एकल पंक्ति एकल स्तंभ मान अर्थात एकल मान लौटाएगा। यह डेटाबेस से एकल मान प्राप्त करने के लिए बहुत तेज़ है। (अधिक पढ़ें)

ExecuteReader कमांड ऑब्जेक्ट का उपयोग करते हुए SQL क्वेरी या संग्रहीत प्रक्रिया के निष्पादन पर पंक्तियों के सेट को वापस करने के लिए उपयोग किया जाएगा। यह केवल अभिलेखों की पुनर्प्राप्ति के लिए आगे है और इसका उपयोग तालिका मानों को पहली से आखिरी तक पढ़ने के लिए किया जाता है। (अधिक पढ़ें)


1

ExecuteNonQuery: आम तौर पर तब इस्तेमाल किया जाता है जब एसक्यूएल स्टेटमेंट्स में कुछ भी नहीं डाला जाता है जैसे कि इंसर्ट, अपडेट, डिलीट ऑपरेशंस।

cmd.ExcecuteNonQuery();

ExecuteScalar:

इसका उपयोग तब किया जाएगा जब Sql क्वेरी एकल मान लौटाती है।

Int b = cmd.ExcecuteScalar();

ExecuteReader

इसका उपयोग तब किया जाएगा जब Sql query या Stored Procedure कई पंक्तियों / कॉलमों को लौटाता है

SqlDataReader dr = cmd.ExecuteReader();

अधिक जानकारी के लिए आप यहां क्लिक कर सकते हैं http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.