Anda melakukan beberapa kesalahan di sini:
- Anda memberi semua parameter Anda nama yang sama
@searchitem
. Itu tidak akan berhasil. Parameter membutuhkan nama yang unik. - Anda membuat SqlCommand baru untuk setiap item. Itu tidak akan berhasil. Buat SqlCommand sekali di awal loop lalu atur
CommandText
setelah Anda selesai membuat SQL. - SQL Anda diakhiri dengan
AND
, yang bukan sintaks yang valid.
Saran perbaikan (tidak salah, tetapi juga bukan praktik terbaik):
- Seperti yang disarankan Frederik, cara yang biasa dilakukan adalah dengan meletakkan
%
token di parameter, daripada melakukan penggabungan string di dalam SQL. - Kecuali Anda secara eksplisit menggunakan susunan peka huruf besar/kecil untuk database Anda, perbandingan harus peka huruf besar/kecil. Dengan demikian, Anda mungkin tidak memerlukan kode
LOWER
.
Contoh kode:
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();