2013-02-28 6 views
6

पैरामीटर एसक्यूएल क्वेरी के सामने डालने पर @ संकेत क्या करता है?पैरामीटर नाम के सामने @ क्या करता है?

उदाहरण के लिए

:

using (SqlCommand cmd = new SqlCommand("INSERT INTO [User] values (@Forename, @Surname, @Username, @Password)", con)) 
{ 
    cmd.Parameters.AddWithValue("@Forename", txtForename.Text); 
    cmd.Parameters.AddWithValue("@Surname", txtSurname.Text); 
    cmd.Parameters.AddWithValue("@UserName", txtUsername.Text); 
    cmd.Parameters.AddWithValue("@Password", txtPassword.Text); 

    cmd.ExecuteNonQuery(); 
} 
+0

इतने सारे जवाब लॉल! –

+0

नोट: पैरामीटर नाम के लिए @ की आवश्यकता नहीं है, केवल एसक्यूएल कथन। – eschneider

उत्तर

5

अन्य लोगों ने यहां क्या कहा है इसके विपरीत, @ चरित्र प्रति से कुछ नहीं करता है। आप

.AddWithValue("ParaName",value); 

या

.AddWithValue("@ParaName",value); 

साथ पैरामीटर जोड़ने या तो कर सकते हैं और वे दोनों डीबी तरफ @ParamName नाम के एक परमाटर लिए मिलान किया जाएगा। तो यह आवश्यक नहीं है।

यह कहकर, यह हमेशा पैरामीटर के सामने @ का उपयोग करने के लिए एक सुंदर मानक अभ्यास है क्योंकि यह बिल्कुल डेटाबेस पक्ष में नामित किया जाएगा।

+0

हाँ मैंने प्रोग्रामिंग के दौरान ऐसा ही सोचा था, लेकिन मुझे किसी ऐसे व्यक्ति द्वारा बताया गया था कि बिना पैरामीटर को छोड़कर मेरा मतलब होगा कि मेरा कोड एसक्यूएल इंजेक्शन के लिए अधिक संवेदनशील है, क्या यह सच है या ... – bandaa

+0

@bandaa बिल्कुल नहीं, कम से कम इस संदर्भ में नहीं! आप पैरामीटर का उपयोग कर रहे हैं और वे एसक्यूएल इंजेक्शन हमलों के लिए प्रवण नहीं हैं। – Icarus

+0

@bandaa: एसक्यूएल इंजेक्शन खतरा गैर-पैरामीटर प्रश्नों के बारे में * अधिकतर * * है। पूर्व: '" तालिका 1 से col1 का चयन करें जहां x = '"+ txtName.Text +"' "'। यहां, 'txtName.Text' कुछ भी हो सकता है और यदि यह इसमें भी है तो यह क्वेरी को तोड़ सकता है ... – Kaf

1

कुछ नहीं जादुई - यह सिर्फ वाक्य रचना एसक्यूएल मापदंडों और स्थानीय चर निरूपित करने के लिए उपयोग करता है।

string stringWithSlashes = @"Use '\n' to add a new line"; 

या कि आप चर नाम के रूप में आरक्षित शब्दों का प्रयोग कर सकते हैं::

string @class = "Geometry"; 
7

सिर्फ है कि यह सी # @ चरित्र कि संकलक स्ट्रिंग शाब्दिक में भागने-दृश्यों पर कार्रवाई करने के लिए नहीं कहता है के रूप में ही नहीं है क्या इंगित करता है कि यह है क्वेरी में पैरामीटर नाम - कॉलम से किसी फ़ील्ड का उपयोग करने का प्रयास करने के विरोध में।

यह स्पष्ट नहीं है कि क्या यह सख्ती से आवश्यक है जब SqlParameter वस्तु के निर्माण, लेकिन मुझे लगता है कि यह समझ में आता है संगत :)

0

@ कहते हैं कि यह एक इनपुट/आउटपुट पैरामीटर जिसका मूल्य स्क्रिप्ट बाहर से पारित किया जा सकता है होना करने के लिए ।

+2

आउटपुट पैरामीटर भी हो सकता है :) –

0

@ संकेत SqlParameterCollectionपैरामीटर पैरामीटर का नाम है। कॉलम से क्षेत्र का उपयोग करना।

Parameters 

parameterName 
Type: System.String 

The name of the parameter. 
0

उस मामले में @ SQL सर्वर निर्माण है। SQL सर्वर क्वेरी के पैरामीटर्स को @ प्रतीक के साथ निर्दिष्ट किया गया है क्योंकि टी-एसक्यूएल (एसक्यूएल सर्वर प्रोग्रामिंग भाषा) चर के लिए @ प्रतीक का उपयोग करता है।

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