जब मैं किताबें सी # जानने के लिए पढ़ रहा था (कुछ पुराने Visual Studio 2005
किताबें हो सकता है) मैं सलाह का सामना किया है हमेशा SqlCommand.Prepare
हर उपयोग करने के लिए मैं एसक्यूएल कॉल पर अमल (चाहे अपनी 'एक SELECT
/UPDATE
या INSERT
एसक्यूएल सर्वर 2005/2008 पर) और मैं इसके पैरामीटर पास करता हूं। लेकिन क्या यह वास्तव में है?SqlCommand का उपयोग करने के पेशेवरों और विपक्ष सी # में तैयार हैं?
यह हर बार किया जाना चाहिए? या कभी कभी कभी?
क्या इससे कोई फर्क पड़ता है कि यह एक पैरामीटर पारित किया गया है या पांच या बीस?
यदि कोई हो तो उसे क्या बढ़ावा देना चाहिए? क्या यह बिल्कुल ध्यान देने योग्य होगा (मैं यहां
SqlCommand.Prepare
का उपयोग कर रहा हूं और इसे वहां छोड़ दिया है और कभी भी कोई समस्या या ध्यान देने योग्य मतभेद नहीं थे)।
प्रश्न के लिए यह मेरा सामान्य कोड है जिसका उपयोग मैं करता हूं, लेकिन यह एक सामान्य प्रश्न है।
public static decimal pobierzBenchmarkKolejny(string varPortfelID, DateTime data, decimal varBenchmarkPoprzedni, decimal varStopaOdniesienia) {
const string preparedCommand = @"SELECT [dbo].[ufn_BenchmarkKolejny](@varPortfelID, @data, @varBenchmarkPoprzedni, @varStopaOdniesienia) AS 'Benchmark'";
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) //if (varConnection != null) {
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection)) {
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varPortfelID", varPortfelID);
sqlQuery.Parameters.AddWithValue("@varStopaOdniesienia", varStopaOdniesienia);
sqlQuery.Parameters.AddWithValue("@data", data);
sqlQuery.Parameters.AddWithValue("@varBenchmarkPoprzedni", varBenchmarkPoprzedni);
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
}
}
}
}
अतिरिक्त स्पष्टीकरण:
तो मैं अपवाद नीचे कोड में की तरह sqlQuery.Prepare()
ले जाने के फेंक दिया जाता है आकार स्पष्ट रूप से घोषित किया जाना है, जो मूल रूप से मुझे यह सोच कर कि होने sqlQuery.Prepare()
के रूप में पहली यह बेकार बना देता है की प्राप्ति होती है कि? क्या कोई मेरे उदाहरण का उपयोग करके उचित उपयोग दिखा सकता है?
public static decimal pobierzBenchmarkKolejny(string varPortfelID, DateTime data, decimal varBenchmarkPoprzedni, decimal varStopaOdniesienia) {
const string preparedCommand = @"SELECT [dbo].[ufn_BenchmarkKolejny](@varPortfelID, @data, @varBenchmarkPoprzedni, @varStopaOdniesienia) AS 'Benchmark'";
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) //if (varConnection != null) {
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection)) {
sqlQuery.Parameters.AddWithValue("@varPortfelID", varPortfelID);
sqlQuery.Parameters.AddWithValue("@varStopaOdniesienia", varStopaOdniesienia);
sqlQuery.Parameters.AddWithValue("@data", data);
sqlQuery.Parameters.AddWithValue("@varBenchmarkPoprzedni", varBenchmarkPoprzedni);
sqlQuery.Prepare();
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
}
}
}
}
मैं यह कैसे करूँगा? पैरामीटर के बगल में .size जोड़कर और varPortfel कर रहा है। अगर यह एक स्ट्रिंग आदि है?
प्रदर्शन और अन्य चीजों के बारे में क्या? क्या यह केवल एसक्यूएल इंजेक्शन को रोकने के लिए है? मैंने इस प्रश्न पूछने से पहले एमएसडीएन दस्तावेज खुद पढ़ा है और उद्धृत हिस्सा मेरे सवालों के उपयोग के लिए वास्तव में उपयोगी नहीं है या नहीं और यदि उसके पास कुछ वेबसाइटों पर सुझाए गए प्रदर्शन लाभ हैं। – MadBoy
मेरी समझ सब कुछ परिभाषित करके है कि यह क्वेरी योजना को कैश और पुन: उपयोग कर सकती है। मुझे लगता है कि यह आपको अत्यधिक लाभ नहीं देता है। –
क्या मेरे पास कोड में उपयोग सही है? मैंने सभी पैरामीटर सेट किए जाने के बाद तैयार होने की कोशिश की और त्रुटि फेंक दी गई। तो क्या यह है कि sqlQuery.Prepare हमेशा पैरामीटर से पहले इस्तेमाल किया जाना चाहिए या? – MadBoy