Bạn đang làm sai khi cố gắng bao gồm một giá trị trực tiếp trong truy vấn SQL của bạn để bắt đầu. Sử dụng SQL được tham số hóa và chỉ định giá trị dưới dạng DateTime
và giả sử bảng cơ sở dữ liệu của bạn cũng sử dụng trường date / datetime (đúng ra là như vậy), bạn sẽ ổn.
Bạn nên tránh bao gồm các giá trị trực tiếp trong SQL của mình vì ba lý do:
- Bạn sẽ gặp phải những chuyển đổi chuỗi rắc rối có thể sử dụng các định dạng không phù hợp, v.v. Đó là vấn đề ở đây.
- Bạn đang mời tấn công chèn SQL
- Bạn đang trộn mã và dữ liệu, điều này khiến việc đọc mã khó hơn và khó kiểm tra dữ liệu hơn
Bạn muốn một cái gì đó như:
string sql = @"Select distinct v.* from Ven v
inner join Des d on v.venid=d.venid
and cast(d.despdate as datetime) between @start and @end";
using (MySqlCommand command = new MySqlCommand(connection, sql))
{
command.Parameters.AddWithValue("@start", startDateTime);
command.Parameters.AddWithValue("@end", endDateTime);
// Execute the command here
}
If Des.despdate
không đã là một kiểu dữ liệu phù hợp, bạn nên thay đổi kiểu dữ liệu đó ...