Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kueri sql dinamis berparameter

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();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai yang Dipisahkan Koma dengan SQL Query

  2. Tanggal/waktu catatan MSSQL hapus otomatis

  3. Sintaks salah di dekat ''

  4. T-SQL untuk menemukan Nama Server Jarak Jauh dari server yang ditautkan

  5. ORDER BY ... COLLATE di SQL Server