आप अपने पैरामीटर घोषणा में varchar (MAX) के लिए किस आकार का उपयोग करते हैं?


190

मैं आमतौर पर ADO.NET में एक पैरामीटर बनाते समय अपने कॉलम का आकार निर्धारित करता हूं

लेकिन अगर कॉलम है तो मैं किस आकार का उपयोग करूं VARCHAR(MAX)?

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;

जवाबों:


288

इस स्थिति में आप -1 का उपयोग करते हैं।


5
वहाँ सभी -1 करने के लिए सभी पैरामीटर लंबाई सेट करने के लिए कोई प्रदर्शन दोष है, तो मैं एक db- मिलान सूची बनाए रखने के लिए नहीं है?
एंड्रयू बुलॉक

1
वरचर (अधिकतम) को 8000 बाइट्स से कम के मानों के लिए पहचाना जाता है। बड़े मूल्यों के लिए फ़ील्ड को "टेक्स्ट" फ़ील्ड (उर्फ "CLOB") माना जाता है। यह क्वेरी प्लान ऑप्टिमाइज़ेशन और इस कॉलम में बड़े मानों के साथ पंक्तियों को पुनः प्राप्त करने की दक्षता को प्रभावित कर सकता है, क्योंकि डेटा को अतिरिक्त लुकअप की आवश्यकता होने पर "आउट-ऑफ-रो" संग्रहीत किया जाता है।
कीथ्स

Sql में nvarchar (अधिकतम) का प्रयोग करें और लंबाई को परिभाषित करें -1 के साथ SqlDbType.NVarchar in c #
रोमिल कुमार जैन

अगर यह सैम मेशेशा के जवाब के लिए नीचे नहीं था - तो मुझे आपका जवाब याद नहीं होगा। यदि आप कोड के रूप में स्वरूपित कोड की एक नमूना लाइन डालते हैं तो आपके उत्तर को अधिक वोट मिल सकते हैं।
17 जुलाई को qxotk

51

हम में से उन लोगों के लिए, जिन्होंने माइक चान्वस्की द्वारा -1 नहीं देखा था, कोड की पूरी लाइन:

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";

2

अधिकतम SqlDbType.VarChar का आकार 2147483647 है।

आप एक सामान्य प्रयोग करेंगे तो OLEDB कनेक्शन एसक्यूएल के बजाय, मैंने पाया यहाँ वहाँ भी एक LongVarChar डेटाप्रकार है। इसका अधिकतम आकार 2147483647 है।

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";

1

आपको आकार पैरामीटर को पारित करने की आवश्यकता नहीं है, बस Varcharपहले से ही घोषित है कि यह अधिकतम की तरह है:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

1
निष्पादन योजना की गणना कैसे की जाती है, इसके कारण आपके SQL सर्वर पर नकारात्मक प्रभाव पड़ सकता है।
ययाकोव

मैंने पाया कि आउटपुट पैरामीटर का उपयोग करते समय ऐसा नहीं होता है। इसका परिणाम निम्न त्रुटि `अपवाद: स्ट्रिंग [2]: आकार की संपत्ति का अवैध आकार 0. है। इसे ठीक करने के लिए, आकार = -1 का उपयोग करें stackoverflow.com/questions/21087950/-
माइकल के

1

यदि आप ऐसा कुछ करते हैं:

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

आकार "कुछ बड़े पाठ" से लिया जाएगा

यह समस्याग्रस्त हो सकता है जब यह एक आउटपुट पैरामीटर है, तो आपको कोई और वर्ण वापस नहीं मिलता है तब आप इनपुट के रूप में डालते हैं।

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