2011-08-31 15 views
8

मैं एक WPF आवेदन जिसमें मैंएसक्यूएल बयान में स्ट्रिंग चर का उपयोग कैसे करें

string someone = TextBox.text; 

मैं निम्न क्वेरी

query = " Select * From Table Where Title = someone " 

मैं के बारे में जाना कैसे करना चाहिए में इस का उपयोग करना चाहते हो रही है क्वेरी में परिवर्तनीय किसी का उपयोग कर?

+2

आपको नहीं करना चाहिए! कभी एसक्यूएल इंजेक्शन या पैरामीटरयुक्त प्रश्नों के बारे में सुना? –

+0

हां, यह बहुत खराब अभ्यास है –

+0

यहां आप कुछ एसक्यूएल इंजेक्शन उदाहरणों को पढ़ सकते हैं http://en.wikipedia.org/wiki/SQL_injection –

उत्तर

13

आप सिर्फ इस

query = "Select * From Table Where Title = " + someone; 

कर सकते हैं बारे में चिंता करने की जरूरत नहीं है लेकिन वह बुरा है और SQL इंजेक्शन के लिए आप खुल जाता है

तुम बस चाहिए एक पैरामिट्रीकृत क्वेरी का उपयोग

कुछ इस तरह मिलना चाहिए आप

using (var cn = new SqlClient.SqlConnection(yourConnectionString)) 
using (var cmd = new SqlClient.SqlCommand()) 
{ 
    cn.Open(); 
    cmd.Connection = cn; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "Select * From Table Where Title = @Title"; 
    cmd.Parameters.Add("@Title", someone); 
} 
शुरू कर दिया

जॉन स्कीट के जवाब से, क्योंकि वह

अधिक जानकारी के लिए SqlCommand.Parameters के दस्तावेज़ों को देखें।

मूल रूप से आप एसक्यूएल के भीतर आपकी मूल्यों एम्बेड नहीं चाहिए विभिन्न कारणों के लिए:

  • यह जब तक आप बहुत हो कोड और डेटा
  • यह आप एसक्यूएल इंजेक्शन के लिए खुल जाता है हमलों मिश्रण करने असजीला है
  • बचने के बारे में सावधान आप जब क्वेरी केवल मूल्योंसाथ ही रहता है नंबर, दिनांक और बार आदि
  • जैसी चीजों के लिए स्वरूपण और i18n विवरण के बारे में चिंता करने की ज़रूरतबदलते हुए, ऑप्टिमाइज़र के पास कम काम होता है - यह को पिछली अनुकूलित क्वेरी सीधे देख सकता है क्योंकि यह SQL के शर्तों में एकदम सही मिलान होगा।
+0

क्या होगा यदि मेरे पास एकाधिक चर है तो मुझे जोड़ना होगा? – Si8

+1

एकाधिक पैरामीटर का उपयोग करें। कुछ ऐसा दिखाई देगा 'cmd.CommandText =" का चयन करें * मेज से कहां टाइल = @Title, बात = @ Thing' 'cmd.Parameters.Add (" @ शीर्षक ", किसी को); cmd.Parameters.Add ("@ टिंग, चीज);' – msarchet

+0

अब समझ में आता है। धन्यवाद। Upvoted। – Si8

10

आप एक पैरामिट्रीकृत SQL क्वेरी का उपयोग करना चाहिए:

query = "SELECT * From TableName WHERE Title = @Title"; 

command.Parameters.Add("@Title", SqlDbType.VarChar).Value = someone; 

अधिक जानकारी के लिए SqlCommand.Parameters के लिये दस्तावेज देखें।

मूल रूप से आप एसक्यूएल के भीतर आपकी मूल्यों एम्बेड नहीं चाहिए विभिन्न कारणों के लिए:

  • यह कोड और डेटा
  • यह आप एसक्यूएल इंजेक्शन हमलों के लिए खुल जाता है जब तक आप बहुत हो मिश्रण करने असजीला है
  • बचने के बारे में सावधान आप
  • जब क्वेरी ही केवल मूल्यों में परिवर्तन के साथ, अनुकूलक हा बनी हुई संख्या, दिनांक और समय आदि जैसी चीजों के लिए स्वरूपण और i18n विवरण के बारे में चिंता करने की ज़रूरत करने के लिए कम काम - यह पिछले अनुकूलित क्वेरी को सीधे देख सकता है क्योंकि यह SQL के संदर्भ में एकदम सही मिलान होगा।
+1

मैंने आपके जवाब के मांस में खींच लिया क्योंकि मेरा स्वीकार कर लिया गया है, इसलिए कम से कम स्वीकृत उत्तर को देखने वाले किसी व्यक्ति को जानकारी की पूरी जानकारी दिखाई देगी। – msarchet

+1

@msarchet: पर्याप्त मेला। –

1

सी # तैयार एसक्यूएल का उपयोग करना सबसे आसान है। Example on this post। आप अपने एसक्यूएल स्ट्रिंग या कुछ भी में पात्रों बचने

-1
declare @SqlQuery varchar(2000), @Fromdate varchar(20), @Todate varchar(20) 

set @Fromdate='01 jan 2017' 
set @Todate='30 mar 2017' 


set @SqlQuery='select * from tblEmployee where tblEmployee.JDate between '''+ @Fromdate + ''' and '''+ @Todate+ '''' 

print @SqlQuery 
संबंधित मुद्दे