2008-12-18 54 views
14

Tôi có điều này:Làm thế nào để kiểm tra một giá trị Null trong VB.NET

If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then 
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value 
End If 

Bây giờ, khi editTransactionRow.pay_id là Null Visual Basic ném một ngoại lệ. Có điều gì sai với mã này không?

+0

Loại editTransactionRow là gì? – Shawn

+0

Bạn cần đăng thông báo lỗi CHÍNH XÁC bạn đang nhận được nếu bạn muốn được trợ giúp. – Micah

+0

Giá trị "Null" này là gì? 'Không có gì'? 'DbNull.Value'? –

Trả lời

8

Nếu bạn đang sử dụng tập dữ liệu được nhập mạnh thì bạn nên làm điều này:

If Not ediTransactionRow.Ispay_id1Null Then 
    'Do processing here 
End If 

Bạn nhận được lỗi vì tập dữ liệu được nhập mạnh truy xuất giá trị cơ bản và hiển thị chuyển đổi thông qua thuộc tính. Ví dụ: về cơ bản đây là những gì đang xảy ra:

Public Property pay_Id1 Then 
    Get 
    return DirectCast(me.GetValue("pay_Id1", short) 
    End Get 
    'Abbreviated for clarity 
End Property 

Phương thức GetValue trả về DBNull không thể chuyển đổi thành ngắn.

+1

Bạn có chắc rằng cú pháp trên hoạt động không? ediTransactionRow.Ispay_id1Null là gì? –

+0

Tại sao 'Nếu không ediTransactionRow.Ispay_id1Null Then'? Biến này là 'editTransactionRow.pay_id'. Bạn có nghĩa là 'Nếu không ediTransactionRow.pay_id Is Null Then'? –

11

editTransactionRow.pay_id là Null, trong thực tế bạn đang làm: null.ToString() và nó không thể được thực hiện. Bạn cần phải kiểm tra editTransactionRow.pay_id và không editTransactionRow.pay_id.ToString();

Bạn mã nên được (NẾU pay_id là một chuỗi):

If String.IsNullOrEmpty(editTransactionRow.pay_id) = False Then 
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value 
End If 

Nếu pay_id là một Integer hơn bạn chỉ có thể kiểm tra nếu nó vô bình thường mà không Chuỗi ... Chỉnh sửa để hiển thị bạn nếu nó không a String:

If editTransactionRow.pay_id IsNot Nothing Then 
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value 
End If 

Nếu từ cơ sở dữ liệu bạn có thể sử dụng IsDBNull nhưng nếu không, không sử dụng.

+0

Vâng, tôi không thể kiểm tra điều này: Nếu String.IsNullOrEmpty (editTransactionRow.pay_id1) = False Sau đó stTransactionPaymentID = editTransactionRow.pay_id1 'Kiểm tra giá trị null Kết thúc Nếu –

+1

đọc những gì tôi đã viết. Bạn có thể so sánh INT của bạn nếu nó sai Nếu không sử dụng chuỗi ... –

1

Bạn phải kiểm tra để đảm bảo editTransactionRow không phải là null và pay_id không phải là rỗng.

0
If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then 
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value 
End If 
33

Tương đương null trong VB là Nothing để kiểm tra bạn muốn trở thành:

If editTransactionRow.pay_id IsNot Nothing Then 
    stTransactionPaymentID = editTransactionRow.pay_id 
End If 

Hoặc có thể, nếu bạn đang thực sự muốn kiểm tra một giá trị SQL null:

If editTransactionRow.pay_id <> DbNull.Value Then 
    ... 
End If 
0
If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString() 
1

Đây là câu trả lời chính xác. Hãy thử mã này:

If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then 
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value 
End If 
8

Bạn cũng có thể sử dụng chức năng IsDBNull:

If Not IsDBNull(editTransactionRow.pay_id) Then 
... 
6
If Not IsDBNull(dr(0)) Then 
    use dr(0) 
End If 

Không sử dụng = Nothing hay Is Nothing, bởi vì nó không kiểm tra nếu giá trị DataRow là null hay không . Tôi đã thử và tôi đảm bảo mã trên hoạt động.

4

Tôi thấy cách an toàn nhất là

If Not editTransactionRow.pay_id Is Nothing 

Nó có thể đọc khủng khiếp, nhưng ISIL thực sự là rất khác so với IsNot Không có gì, và nó không cố gắng và đánh giá biểu thức, trong đó có thể cung cấp một tham chiếu null ngoại lệ.

Các vấn đề liên quan