Thông thường, không có vấn đề gì khi chuyển một chuỗi string
thành tham số là số, miễn là SQL Server có thể chuyển đổi nội dung của chuỗi thành giá trị số. Nếu cách đó không hiệu quả, bạn sẽ gặp lỗi này.
Ví dụ:Chuyển "Hello"
đến một tham số là số, bạn sẽ gặp lỗi. Chuyển "1234"
bạn không. Xin lưu ý rằng không thể chuyển đổi một chuỗi rỗng hoặc một chuỗi chứa khoảng trắng thành giá trị số!
Tuy nhiên, cần phải nói rằng không phải phong cách tốt để làm điều đó. Bạn nên đảm bảo rằng các kiểu bạn sử dụng trong ứng dụng của mình khớp với các kiểu trong cơ sở dữ liệu để tránh các sự cố. Có thể một số chi tiết khác về lý do tại sao bạn cần có string
các loại trong ứng dụng của bạn có thể hữu ích.
CHỈNH SỬA 1
Để tạo một tham số tùy chọn cho truy vấn, cách thực hiện sẽ như sau:
- Thay đổi câu lệnh SQL của bạn để cho phép các tham số tùy chọn như
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Không thêm
@Raumklasse_ID
nếu nó phải là tùy chọn hoặc thêm giá trịDBNull.Value
Bạn thực sự nên xem xét việc thay đổi string
của mình thuộc tính cho các kiểu nullable như int?
.
CHỈNH SỬA 2
Đây là cách mã của bạn có thể trông như khi triển khai các thay đổi mà tôi đã đề xuất trong Chỉnh sửa 1:
using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) OR STADT_ID = ISNULL(@Stadt_ID, STADT_ID) OR GEBAEUDE_ID = ISNULL(@Gebaeude_ID, GEBAEUDE_ID) OR REGION_ID = ISNULL(@Region_ID, REGION_ID)", con))
{
con.Open();
if (!String.IsNullOrWhitespace(RAUMKLASSE_ID))
cmd.Parameters.AddWithValue("@Raumklasse_ID", RAUMKLASSE_ID);
else
cmd.Parameters.AddWithValue("@Raumklasse_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(STADT_ID))
cmd.Parameters.AddWithValue("@Stadt_ID", STADT_ID);
else
cmd.Parameters.AddWithValue("@Stadt_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(GEBAEUDE_ID))
cmd.Parameters.AddWithValue("@Gebaeude_ID", GEBAEUDE_ID);
else
cmd.Parameters.AddWithValue("@Gebaeude_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(REGION_ID))
cmd.Parameters.AddWithValue("@Region_ID", REGION_ID);
else
cmd.Parameters.AddWithValue("@Region_ID", DBNull.Value);
...
}