Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

पैरामीटरयुक्त गतिशील एसक्यूएल क्वेरी

आप यहां कुछ गलत कर रहे हैं:

  • आप अपने सभी मापदंडों को एक ही नाम देते हैं @searchitem . यह काम नहीं करेगा। पैरामीटर को अद्वितीय नामों की आवश्यकता होती है।
  • आप प्रत्येक आइटम के लिए एक नया SqlCommand बनाते हैं। यह काम नहीं करेगा। SqlCommand बनाएं एक बार लूप की शुरुआत में और फिर CommandText . सेट करें एक बार जब आप SQL बना लेते हैं।
  • आपका SQL AND के साथ समाप्त होता है , जो मान्य सिंटैक्स नहीं है।

सुधार के सुझाव (गलत नहीं, लेकिन सर्वोत्तम अभ्यास भी नहीं):

  • जैसा कि फ्रेडरिक ने सुझाव दिया था, सामान्य तरीका यह है कि % SQL के अंदर स्ट्रिंग संयोजन करने के बजाय पैरामीटर में टोकन।
  • जब तक आप अपने डेटाबेस के लिए स्पष्ट रूप से केस-संवेदी संयोजन का उपयोग नहीं करते, तुलना केस-संवेदी नहीं होनी चाहिए। इस प्रकार, आपको LOWER . की आवश्यकता नहीं हो सकती है ।

कोड उदाहरण:

SqlCommand cmd = new SqlCommand();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.Append("SELECT name, memberid FROM members ");

var i = 1;
foreach (string item in keywords)
{
    sqlBuilder.Append(i == 1 ? " WHERE " : " AND ");
    var paramName = "@searchitem" + i.ToString();
    sqlBuilder.AppendFormat(" Name LIKE {0} ", paramName); 
    cmd.Parameters.AddWithValue(paramName, "%" + item + "%");

    i++;
}
cmd.CommandText = sqlBuilder.ToString();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. समाधान में सभी एसएसआईएस पैकेजों की सभी त्रुटियां कैसे प्राप्त करें

  2. डेटाबेस मेल प्रोफ़ाइल (SSMS) हटाएं

  3. विदेशी कुंजी बाधाओं को कैसे विश्वसनीय बनाया जाए?

  4. मैं SQL सर्वर में किसी दिनांक से माह संख्या (महीने का नाम नहीं) कैसे प्राप्त कर सकता हूं?

  5. डेटाबेस से पिक्चरबॉक्स छवि लोड हो रहा है