24

I have this:

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

Now, when editTransactionRow.pay_id is Null Visual Basic throws an exception. Is there something wrong with this code?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131

10 Answers10

43

The equivalent of null in VB is Nothing so your check wants to be:

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

Or possibly, if you are actually wanting to check for a SQL null value:

If editTransactionRow.pay_id <> DbNull.Value Then
    ...
End If
Garry Shutler
  • 32,260
  • 12
  • 84
  • 119
11

editTransactionRow.pay_id is Null so in fact you are doing: null.ToString() and it cannot be executed. You need to check editTransactionRow.pay_id and not editTransactionRow.pay_id.ToString();

You code should be (IF pay_id is a string):

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

If pay_id is an Integer than you can just check if it's null normally without String... Edit to show you if it's not a String:

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

If it's from a database you can use IsDBNull but if not, do not use it.

Patrick Desjardins
  • 136,852
  • 88
  • 292
  • 341
  • Well, I can't check this: If String.IsNullOrEmpty(editTransactionRow.pay_id1) = False Then stTransactionPaymentID = editTransactionRow.pay_id1 'Check for null value End If –  Dec 18 '08 at 15:47
  • 1
    read what I have wrote. You can compare your INT if it's false WITHOUT using string... – Patrick Desjardins Dec 18 '08 at 15:51
9

If you are using a strongly-typed dataset then you should do this:

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

You are getting the error because a strongly-typed data set retrieves the underlying value and exposes the conversion through the property. For instance, here is essentially what is happening:

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

The GetValue method is returning DBNull which cannot be converted to a short.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Micah
  • 111,873
  • 86
  • 233
  • 325
9

You can also use the IsDBNull function:

If Not IsDBNull(editTransactionRow.pay_id) Then
...
Aaron G
  • 91
  • 1
  • 3
6
If Not IsDBNull(dr(0)) Then
    use dr(0)
End If

Don't use = Nothing or Is Nothing, because it fails to check if the datarow value is null or not. I tried, and I make sure the above code worked.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Arunsai
  • 61
  • 1
  • 1
4

I find the safest way is

If Not editTransactionRow.pay_id Is Nothing

It might read terribly, but the ISIL is actually very different from IsNot Nothing, and it doesn't try and evaluate the expression, which could give a null reference exception.

Stuart Dobson
  • 3,001
  • 4
  • 35
  • 37
1

You have to check to ensure editTransactionRow is not null and pay_id is not null.

Zachary Yates
  • 12,966
  • 7
  • 55
  • 87
1

This is the exact answer. Try this code:

If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
D Infosystems
  • 93
  • 2
  • 5
  • 14
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
Vincent
  • 22,366
  • 18
  • 58
  • 61
0
 If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()
Shawn
  • 19,465
  • 20
  • 98
  • 152