Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn sql động được tham số hóa

Bạn đang làm sai một số điều ở đây:

  • Bạn đặt cùng một tên cho tất cả các tham số của mình @searchitem . Điều đó sẽ không hoạt động. Các tham số cần có tên duy nhất.
  • Bạn tạo một SqlCommand mới cho từng mục. Điều đó sẽ không hoạt động. Tạo SqlCommand một lần ở đầu vòng lặp và sau đó đặt CommandText sau khi bạn tạo xong SQL.
  • SQL của bạn kết thúc bằng AND , đây không phải là cú pháp hợp lệ.

Đề xuất cải tiến (không sai, nhưng cũng không phải là phương pháp hay nhất):

  • Như Frederik đã đề xuất, cách thông thường là đặt % mã thông báo trong tham số, thay vì thực hiện nối chuỗi bên trong SQL.
  • Trừ khi bạn sử dụng rõ ràng đối chiếu phân biệt chữ hoa chữ thường cho cơ sở dữ liệu của mình, các so sánh phải phân biệt chữ hoa chữ thường. Do đó, bạn có thể không cần LOWER .

Ví dụ về mã:

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. Nó có phải là một cách lập trình để lấy các từ khóa SQL (các từ dành riêng)

  2. Làm cách nào để sử dụng bí danh trong mệnh đề where?

  3. Chuyển đổi số nguyên thành hex và hex thành số nguyên

  4. SQL SERVER:Nhận tổng số ngày giữa hai ngày

  5. Tìm hiểu về cách sử dụng SQL Server Management Studio