हम सी # से SQL सर्वर से कनेक्ट करने के लिए मानक System.Data
कक्षाओं, DbConnection
और DbCommand
का उपयोग करते हैं, और हमारे पास कई संग्रहीत प्रक्रियाएं हैं जो इनपुट के रूप में VARCHAR
या NVARCHAR
पैरामीटर लेती हैं। हमने पाया कि न तो SQL सर्वर और न ही हमारे सी # एप्लिकेशन किसी भी प्रकार की त्रुटि या चेतावनी फेंकता है जब पैरामीटर की अधिकतम लंबाई से अधिक स्ट्रिंग को उस पैरामीटर के मान के रूप में पास किया जाता है। इसके बजाए, मान को पैरामीटर की अधिकतम लंबाई तक चुपचाप छोटा कर दिया जाता है।मैं अपने संग्रहीत प्रक्रिया इनपुट को चुपचाप कटाई से कैसे रखूं?
तो, उदाहरण के लिए, यदि संग्रहीत प्रक्रिया इनपुट प्रकार VARCHAR(10)
की है और हम 'U R PRETTY STUPID'
में गुजरती हैं, संग्रहीत प्रक्रिया है जो बहुत अच्छा है, लेकिन हम क्या कहते हैं करने के लिए होती पूरी तरह से नहीं है 'U R PRETTY'
के रूप में इनपुट, प्राप्त करता है।
क्या मैं इन truncations पता लगाने के लिए पूर्व में की गई है, और क्या others have likewise suggested, पैरामीटर इनपुट लंबाई एक चरित्र की आवश्यकता की तुलना में बड़ा बनाने के लिए, और उसके बाद जाँच लें कि इनपुट की लंबाई है कि नए अधिकतम लंबाई के बराबर है । तो उपर्युक्त उदाहरण में मेरा इनपुट VARCHAR(11)
बन जाएगा और मैं लंबाई 11 के इनपुट की जांच करूंगा। 11 या उससे अधिक लंबाई के किसी भी इनपुट को इस चेक द्वारा पकड़ा जाएगा। यह काम करता है, लेकिन गलत लगता है। आदर्श रूप से, डेटा एक्सेस लेयर इन समस्याओं का स्वचालित रूप से पता लगाएगा।
क्या यह पता लगाने का एक बेहतर तरीका है कि प्रदत्त संग्रहीत प्रक्रिया इनपुट अनुमति से अधिक लंबा है? DbCommand
पहले से ही इनपुट लंबाई सीमा से अवगत नहीं होना चाहिए?
इसके अलावा, जिज्ञासा के मामले में, चुपचाप हमारे इनपुट को कम करने के लिए ज़िम्मेदार क्या है?
क्या आप चरित्र सीमा से छुटकारा पा सकते हैं और इसके बजाय एक जांच बाधा का उपयोग कर सकते हैं? –
@ माइक क्रिस्टेनसेन - क्या आप इसका मतलब थोड़ा बढ़ा सकते हैं? हमारी टेबल पहले से ही सही डेटा प्रकार (और लंबाई), एफके, और 'जांच' बाधाओं के साथ उचित रूप से बाध्य हैं। इससे पहले कि मैं किसी भी संग्रहीत प्रक्रिया तर्क या प्रश्नों में उनका उपयोग करने से पहले अति-सीमा इनपुट का पता लगा रहा हूं। –
ओह, मैं क्षमा चाहता हूं, मैं सोच रहा था कि आप सीधे एक टेबल में डालने वाले थे। आप स्पोक पैरामीटर के बारे में बात कर रहे हैं। क्या आप इसे 'वर्चर (MAX)' बना सकते हैं और फिर स्पोक में लंबाई की जांच कर सकते हैं? –