आप यहां कुछ गलत कर रहे हैं:
- आप अपने सभी मापदंडों को एक ही नाम देते हैं
@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();