hôm nay tôi tình cờ gặp một hành vi kỳ lạ của câu lệnh VB.net If(). Có lẽ bạn có thể giải thích lý do tại sao nó hoạt động như nó, hoặc có thể bạn có thể xác nhận rằng đó là một lỗi.Hành vi lạ của câu lệnh If()
Vì vậy, tôi có một cơ sở dữ liệu SQL với một bảng "TestTable" với một cột int "NullableColumn" có thể chứa NULL. Tôi muốn đọc nội dung của cột này.
Vì vậy, tôi khai báo một biến kiểu Nullable(Of Integer)
cho rằng vấn đề, mở một SqlClient.SqlDataReader
cho "SELECT NullableColumn TỪ testtable" và sử dụng đoạn mã sau để có được nội dung của cột này:
Dim content as Nullable(Of Integer)
...
Using reader as SqlClient.SqlDataReader = ...
content = If(reader.IsDBNull(reader.GetOrdinal("NullableColumn")), Nothing, reader.GetInt32(reader.GetOrdinal("NullableColumn")))
End Using
Nhưng sau đó tôi biến content
có giá trị 0, không phải là Nothing
như tôi mong đợi.
Khi gỡ lỗi tất cả mọi thứ trông ổn, vì vậy
reader.GetOrdinal("NullableColumn")
mang lại đúng vị trí thứ tự của cột này (đó là 0)reader.IsDBNull(0)
vàreader.IsDBNull(reader.GetOrdinal("NullableColumn"))
cung cấpTrue
, vì nội dung của cột này thực sự là NULLIf(1=2, Nothing, "Not Nothing")
phân phối chuỗi "Không có gì"If(1=1, Nothing, "Not Nothing")
cung cấpNothing
reader.GetInt32(reader.GetOrdinal("NullableColumn"))
ném một lỗi, vì NULL không thể được chuyển đổi sangInteger
Vì vậy, tại sao không biến tôi có giá trị 0?
Bạn đã sử dụng một Nếu bình thường - sau đó - tuyên bố elese? Nó có hoạt động không? –
Không quan tâm bạn đã bật 'Tùy chọn Strict' chưa? Nếu không, bạn nên –
Có, tôi đã thử một bình thường 'Nếu ... Sau đó ... Khác ...' statemant, và điều này làm việc. Bật 'Tùy chọn Strict' không thay đổi gì cả. – Nostromo