J'ai ceci:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Maintenant, quand editTransactionRow.pay_id
est Null Visual Basic lève une exception. Y a-t-il un problème avec ce code?
Si vous utilisez un ensemble de données fortement typé, vous devez procéder comme suit:
If Not ediTransactionRow.Ispay_id1Null Then
'Do processing here
End If
Vous obtenez l'erreur car un ensemble de données fortement typé récupère la valeur sous-jacente et expose la conversion via la propriété. Par exemple, voici essentiellement ce qui se passe:
Public Property pay_Id1 Then
Get
return DirectCast(me.GetValue("pay_Id1", short)
End Get
'Abbreviated for clarity
End Property
La méthode GetValue renvoie DBNull qui ne peut pas être converti en short.
L'équivalent de null
dans VB est Nothing
donc votre chèque veut être:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id
End If
Ou peut-être, si vous souhaitez réellement rechercher une valeur nulle SQL:
If editTransactionRow.pay_id <> DbNull.Value Then
...
End If
editTransactionRow.pay_id est Null, donc en fait vous faites: null.ToString () et il ne peut pas être exécuté. Vous devez vérifier editTransactionRow.pay_id et non editTransactionRow.pay_id.ToString ();
Votre code devrait être (SI pay_id est une chaîne):
If String.IsNullOrEmpty(editTransactionRow.pay_id) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Si pay_id est un Integer, vous pouvez simplement vérifier s'il est normalement nul sans String ... Modifier pour vous montrer si ce n'est pas une String:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Si c'est à partir d'une base de données, vous pouvez utiliser IsDBNull mais sinon, ne l'utilisez pas.
Vous pouvez également utiliser la fonction IsDBNull:
If Not IsDBNull(editTransactionRow.pay_id) Then
...
If Not IsDBNull(dr(0)) Then
use dr(0)
End If
N'utilisez pas = Nothing
ou Is Nothing
, car il ne parvient pas à vérifier si la valeur de la datarow est nulle ou non. J'ai essayé et je m'assure que le code ci-dessus a fonctionné.
Je trouve que le moyen le plus sûr est
If Not editTransactionRow.pay_id Is Nothing
Il peut lire terriblement, mais ISIL est en fait très différent de IsNot Nothing, et il n'essaie pas d'évaluer l'expression, ce qui pourrait donner une exception de référence nulle.
Vous devez vérifier que editTransactionRow n'est pas nul et pay_id n'est pas nul.
Telle est la réponse exacte. Essayez ce code:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()