2008-12-18 17 views
14

tengo esto:Cómo comprobar si hay un valor nulo en VB.NET

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

Ahora, cuando editTransactionRow.pay_id es nulo de Visual Basic se produce una excepción. ¿Hay algo mal con este código?

+0

¿Cuál es el tipo de editTransactionRow? – Shawn

+0

Debe publicar el mensaje de error EXACTO que recibirá si desea ayuda. – Micah

+0

¿Qué es este valor "nulo"? 'Nada'? 'DbNull.Value'? –

Respuesta

8

Si está utilizando un conjunto de datos fuertemente tipado, debe hacer esto:

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

Recibirá el error porque un conjunto de datos fuertemente tipado recupera el valor subyacente y expone la conversión a través de la propiedad. Por ejemplo, aquí es esencialmente lo que está sucediendo:

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

El método GetValue está volviendo DBNull que no se puede convertir en un corto.

+1

¿Estás seguro de que la sintaxis anterior funciona? ¿Qué es ediTransactionRow.Ispay_id1Null? –

+0

¿Por qué 'If Not ediTransactionRow.Ispay_id1Null Then'? La variable es 'editTransactionRow.pay_id'. ¿Quieres decir 'If Not ediTransactionRow.pay_id Is Null Then'? –

11

editTransactionRow.pay_id es nulo, de hecho lo estás haciendo: null.ToString() y no se puede ejecutar. Debe verificar editTransactionRow.pay_id y no editarTransactionRow.pay_id.ToString();

código

Usted debe ser (SI pay_id es una cadena):

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

Si pay_id es un número entero de lo que sólo puede comprobar si es nula normalmente sin cadena ... Editar para mostrar que si no es una cadena:

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

Si se trata de una base de datos que puede utilizar IsDBNull pero si no, no utilizarlo.

+0

Bueno, no puedo comprobar esto: Si String.IsNullOrEmpty (editTransactionRow.pay_id1) = False Then stTransactionPaymentID = editTransactionRow.pay_id1 'Buscar valor nulo End If –

+1

leer lo que he escrito. Puedes comparar tu INT si es falso SIN usar una cadena ... –

1

Debes asegurarte de que editTransactionRow no es nulo y pay_id no es nulo.

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

El equivalente de null en VB es Nothing por lo que su cheque quiere ser:

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

O posiblemente, si en realidad se está esperando para comprobar si hay un valor nulo SQL:

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

Esta es la respuesta exacta. Prueba este código:

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

También puede utilizar la función IsDBNull:

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

No utilice = Nothing o Is Nothing, porque no puede comprobar si el valor DataRow es nulo o no . Lo intenté y me aseguré de que el código anterior funcionara.

4

me parece la forma más segura es

If Not editTransactionRow.pay_id Is Nothing 

Podría leer terriblemente, pero el ISIL en realidad es muy diferente de IsNot Nada, y no tratar de evaluar la expresión, lo que podría dar una referencia nula excepción.

Cuestiones relacionadas