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