दिलचस्प पोस्ट
IE 11 के लिए एक सीएसएस हैक कैसे लिखूँ? सी पद्धति से उद्देश्य-सी पद्धति को कैसे कॉल करें? डीजेंगो में एडिशन फॉर्म से ऑब्जेक्ट अपडेट करने के लिए कैसे? दिए गए k विभाजन के साथ पायथन पूर्णांक विभाजन कार्डव्यू लेआउट_विंड = "मैच_पेरेंट" अभिभावक रीसाइक्लरदृश्य चौड़ाई से मेल नहीं खाता कई बार फ़ायरिंग jQuery के क्लिक ईवेंट्स फ़ंक्शन / विधि के लिए मुझे 'इनलाइन' कीवर्ड लिखना चाहिए? पहले 10000 प्रमुख संख्याओं के लिए सबसे कुशल कोड? लगभग स्ट्रिंग मिलान एल्गोरिदम WinForms प्रगति बार का उपयोग कैसे करें? खंड के स्विचिंग के दौरान परदे () के लिए वैकल्पिक "है" ऑपरेटर अनपेक्षित रूप से पूर्णांक के साथ व्यवहार करता है क्लोज़र के लिए प्रोफाइलिंग टूल? वास्तव में प्रतिनिधि Xcode ios प्रोजेक्ट में क्या करते हैं? लैम्ब्डा फ़ंक्शन पायथन में पैरामीटर को बंद नहीं करता है?

Parameters.Add और Parameters.AddWithValue के बीच अंतर

मैं एमएसडीएन प्रलेखन और उदाहरण यहां पढ़ता हूं और मुझे पता है कि Paramters.Add लिए सही सिंटैक्स। जोड़ें कॉल है:

  command.Parameters.Add("@ID", SqlDbType.Int); command.Parameters["@ID"].Value = customerID; 

जहां आपको पैरामीटर का नाम, SqlDbType और मान का मान निर्दिष्ट करना है। मूल्य।

अब Parameters.AddWithValue लिए सही सिंटैक्स। Parameters.AddWithValue कॉल है:

  command.Parameters.AddWithValue("@demographics", demoXml); 

एकल पंक्ति और Type भाग को छोड़ दें।

मेरा प्रश्न है: यह कैसे होता है कि जब मैं ऐसा करता हूं,

  command.Parameters.Add("@demographics", demoXml); // .Add method with .AddWithValue syntax 

मुझे कोई संकलन त्रुटि नहीं है और यहां तक ​​कि हमला भी नहीं, सब कुछ ठीक से काम करता है जब कोड निष्पादित होता है?

Solutions Collecting From Web of "Parameters.Add और Parameters.AddWithValue के बीच अंतर"

कार्यक्षमता के मामले में कोई अंतर नहीं है वास्तव में, ये दोनों करें:

 return this.Add(new SqlParameter(parameterName, value)); 

वे AddWithValue पक्ष में पुराने को पदावनत करने का कारण अतिरिक्त स्पष्टता जोड़ना है, साथ ही साथ दूसरा पैरामीटर object , जो इसे कुछ लोगों को तत्काल स्पष्ट नहीं करता है जो Add अधिभार को बुलाया जा रहा था, और वे बेतहाशा भिन्न व्यवहार।

इस उदाहरण पर एक नज़र डालें:

  SqlCommand command = new SqlCommand(); command.Parameters.Add("@name", 0); 

पहली नज़र में, ऐसा लगता है कि यह Add(string name, object value) अधिभार को बुला रहा है, लेकिन ऐसा नहीं है । यह Add(string name, SqlDbType type) अधिभार को बुला रहा है! इसका कारण यह है कि 0 enum प्रकारों के लिए निहित रूप से परिवर्तनीय है। तो ये दो पंक्तियां:

  command.Parameters.Add("@name", 0); 

तथा

  command.Parameters.Add("@name", 1); 

दरअसल दो अलग-अलग तरीकों का इस्तेमाल किया जा रहा है 1 पूरी तरह से एक enum के लिए परिवर्तनीय नहीं है, इसलिए यह object अधिभार चुनता है। 0 साथ, यह इंमेन अधिभार चुनता है।

AddWithValue का प्रयोग करते समय भिन्न अंतर रूपांतरण होता है। यदि आप जानते हैं कि आपके निष्पादन एसक्यूएल क्वेरी (संग्रहीत कार्यविधि) प्रकार का एक मान स्वीकार कर रहा है int, nvarchar, आदि, आपके कोड में इसे पुनः घोषित करने में कोई कारण नहीं है।

जटिल प्रकार के परिदृश्यों (उदाहरण के लिए डेटटाइम, फ्लोट) होगा, मैं शायद ऐड का प्रयोग करूँगा क्योंकि यह अधिक स्पष्ट है, लेकिन अधिक सीधे-आगे प्रकार परिदृश्यों (Int से Int) के लिए AddWithValue।

स्पष्ट रूप से command.Parameters.Add("@ID", SqlDbType.Int); रूप में प्रकार प्रदान किए बिना। command.Parameters.Add("@ID", SqlDbType.Int);command.Parameters.Add("@ID", SqlDbType.Int); , यह निहित रूप से इनपुट को उसमें बदलने की कोशिश करेगा जो इसकी उम्मीद कर रहा है।

इसका नकारात्मक पक्ष यह है कि अंतर्निहित रूपांतरण रूपांतरणों का सबसे अधिक अनुकूल नहीं हो सकता है और एक प्रदर्शन हिट हो सकता है।

यहां इस विषय के बारे में चर्चा है: http://forums.asp.net/t/1200255.aspx/1

जब हम CommandObj.Parameter.Add () उपयोग करते हैं तो यह पहले 2 पैरामीटर लेता है प्रक्रिया पैरामीटर है और दूसरा इसका डेटा प्रकार है, लेकिन। AddWithValue () ले लो 2 पैरामीटर पहले प्रक्रिया पैरामीटर लेता है और दूसरा डेटा चर है

 CommandObj.Parameter.Add("@ID",SqlDbType.Int).Value=textBox1.Text; 

// के लिए। AddWithValue

 CommandObj.Parameter.AddWitheValue("@ID",textBox1.Text); 

जहां आईडी संग्रहित प्रक्रिया का पैरामीटर है, जिसमें डेटा प्रकार Int है