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

Gặp lỗi:Lỗi chuyển đổi kiểu dữ liệu nvarchar thành số trong SQL

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:

  1. 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) .
  2. 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);
    ...
}


  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 làm việc với after insert trigger trong sql server 2008

  2. Lỗi:Loại cột DOB xung đột với loại cột khác được chỉ định trong danh sách UNPIVOT

  3. SQL Server 2008 R2 - UDF vô hướng dẫn đến vòng lặp vô hạn

  4. các thủ tục được lưu trữ với sqlAlchemy

  5. Lưu trữ dữ liệu XML trong SQL Server