2013-07-25 1 views
6

का उपयोग करके निष्पादित करने के लिए सुरक्षित रूप से एक SQL स्ट्रिंग का निर्माण करें। मैं .SqlQuery(string sql) कमांड के साथ ईएफ का उपयोग करके कुछ SQL निष्पादित कर रहा हूं।सी # सुरक्षितता फ्रेमवर्क

मैं यह सुनिश्चित करना चाहता हूं कि मेरी एसक्यूएल स्ट्रिंग पूरी तरह से स्वच्छ हो गई है, इसलिए तर्क दृष्टिकोण SqlCommand ऑब्जेक्ट को बनाने के लिए पैरामीटर के साथ उपयोग करना था।

हालांकि मैं इसे SQLLommand का उपयोग करके निष्पादित नहीं करना चाहता, मैं बस एसक्यूएल कॉमांड को एक स्ट्रिंग थूकना चाहता हूं जिसे मैं अपने ईएफ .SqlQuery(...) कॉल में प्लग कर सकता हूं।

क्या ऐसा करने का कोई तरीका है, या मेरे .SqlQuery को सुनिश्चित करने का एक और तरीका इंजेक्शन का परिणाम नहीं देगा?

उत्तर

12

ईएफ का समर्थन बॉक्स से बाहर नहीं है?

आप मानकों के साथ SqlQuery कॉल करने के लिए सक्षम होना चाहिए, तो यह एसक्यूएल इंजेक्शन आदि का ख्याल रखेंगे, SqlCommand जैसे करता है:

var tests = context.Database.SqlQuery<Test>(
    @"SELECT Id, Name FROM tests where Name={0}", "TestName"); 

या ..

var tests = context.Database.SqlQuery<Test>(
    @"SELECT Id, Name FROM tests where [email protected]", 
    new SqlParameter("@name", "TestName")); 
+0

फेसपाल्म। तो यह करता है! – NibblyPig

+0

मैं इसे काम पर नहीं ला सकता हूं। मैंने उपर्युक्त दोनों तरीकों का प्रयास किया है और मुझे बस "टेबल वैरिएबल घोषित करना होगा" @name "त्रुटि। – NibblyPig

+0

पर कोई प्रलेखन नहीं है क्या आप टेबल नाम को पैरामीटर के रूप में पास करने का प्रयास कर रहे हैं? यह नहीं जा रहा है काम करने के लिए। [यहां देखें।] (http://stackoverflow.com/questions/14003241/must-declare-the-table-variable-table) क्या आपको वास्तव में सारणी होने के लिए तालिका नाम की आवश्यकता है? –

0

एसक्यूएल कॉमांड की कमांडटेक्स्ट संपत्ति प्राप्त करें।

string query = cmd.CommandText; 

foreach (SqlParameter p in cmd.Parameters) 
{ 
    query = query.Replace(p.ParameterName, p.Value.ToString()); 
} 
+0

कि कोशिश की, लेकिन कमांड टेक्स्ट केवल मुझे अपनी मूल स्ट्रिंग वापस देता है - यह पैरामीटर को इसमें नहीं डालता है: उदाहरण के लिए * SELECT * से @tableName जहां @propertyName = @ searchQuery' – NibblyPig

+0

पुन: संपादित करें - यह एक स्ट्रिंगबिल्डर का उपयोग करने जैसा नहीं है ? - बस कोशिश की और यह है। यह sanitize या कुछ भी नहीं है। – NibblyPig

+0

मुझे विश्वास है (लेकिन गलत हो सकता है) कि SqlCommand ऑब्जेक्ट आपकी रक्षा करेगा। –

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