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

Cách sử dụng biến chuỗi trong câu lệnh sql

Bạn chỉ có thể làm điều này

query = "Select * From Table Where Title = " + someone;

Nhưng điều đó thật tệ và mở ra cho bạn SQL Injection

Bạn chỉ nên sử dụng một truy vấn được tham số hóa

Một cái gì đó như thế này sẽ giúp bạn bắt đầu

using (var cn = new SqlClient.SqlConnection(yourConnectionString))
using (var cmd = new SqlClient.SqlCommand())
{
   cn.Open();
   cmd.Connection = cn;
   cmd.CommandType = CommandType.Text;
   cmd.CommandText = "Select * From Table Where Title = @Title";
   cmd.Parameters.Add("@Title", someone);
}

Từ câu trả lời của Jon Skeet vì anh ấy hoàn thiện hơn câu trả lời của tôi

Xem tài liệu cho SqlCommand.Parameters để biết thêm thông tin.

Về cơ bản, bạn không nên nhúng các giá trị của mình vào chính SQL vì nhiều lý do:

  • Việc trộn mã và dữ liệu là không phù hợp
  • Nó mở ra cho bạn các lệnh truy xuất SQL trừ khi bạn rất cẩn thận về việc thoát
  • Bạn phải lo lắng về định dạng và chi tiết i18n cho những thứ như số, ngày và giờ, v.v.
  • Khi truy vấn vẫn giữ nguyên chỉ có các giá trị thay đổi, trình tối ưu hóa sẽ ít việc phải làm hơn - nó có thể tra cứu trực tiếp truy vấn được tối ưu hóa trước đó vì nó sẽ là một kết hợp hoàn hảo của SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách trả về các cột động từ các giá trị được nhóm trong SQL Server (Thủ tục đã Lưu trữ)

  2. Nối nhiều bảng trả về giá trị NULL

  3. Trong SQL Server, tại sao NULL không bằng chuỗi trống VÀ không bằng chuỗi trống?

  4. Chuỗi định dạng ngày / giờ chuẩn được hỗ trợ bởi FORMAT () trong SQL Server

  5. Mẹo để giảm độ phức tạp của máy chủ SQL của bạn