2010-09-02 4 views
13

J'ai une fonction de mise à jour qui met à jour une table db de serveur SQL via un ensemble de données. L'un des champs de la table est un entier et accepte les valeurs nulles. Donc, quand je remplis la fonction de mise à jour, j'ai besoin d'un moyen d'entrer une valeur nulle lorsque la fonction veut un nombre entier.Rendre un entier vide

J'ai essayé de le faire de cette façon, mais _intDLocation = "" déclenche une exception

Dim _dLocation As String = udDefaultLocationTextEdit.Text 
    Dim _intDLocation As Integer 
    If _dLocation <> "" Then 
     _intDLocation = Integer.Parse(udDefaultLocationTextEdit.Text) 
    Else 
     'NEED HELP HERE 
     _intDLocation = "" 
    End If 

Répondre

29

Entiers ne peut pas être réglé sur Null. Vous devez rendre l'entier "nullable" en ajoutant un point d'interrogation après le mot Integer. Maintenant _intDLocation n'est plus un entier normal. C'est une instance de Nullable(Of Integer).

Dim _dLocation As String = udDefaultLocationTextEdit.Text 
Dim _intDLocation As Integer? 
If _dLocation <> "" Then 
    _intDLocation = Integer.Parse(udDefaultLocationTextEdit.Text) 
Else 
    _intDLocation = Nothing 
End If 

Plus tard, si vous voulez vérifier null vous pouvez utiliser cette pratique, la syntaxe lisible:

If _intDLocation.HasValue Then 
    DoSomething() 
End If 

Dans certains cas, vous aurez besoin d'accéder à la valeur comme un entier réel, pas entier nullable. Pour ces cas, vous accédez simplement

_intDLocation.Value 

Pour tout savoir sur Nullable here.

+2

+1 Totalement oublié vous pouvez utiliser 'Integer?'. Nice et concis. –

+2

Pour ajouter à cette réponse par ailleurs excellente: _intDLocation sera en réalité une instance de Nullable (Of Integer). Voir la documentation de Nullable ici: http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx –

+1

Merci, Etienne. Je vais ajouter cela. – Larsenal

4

Essayez ceci:

Dim _dLocation As String = udDefaultLocationTextEdit.Text 

Dim _intDLocation As Nullable(Of Integer) 

If Not String.IsNullOrEmpty(_dLocation) Then 
    _intDLocation = Integer.Parse(_dLocation) 
End If 
0

Mon application utilise beaucoup d'étiquettes qui commencent en blanc (propriété Text), mais elles doivent être incrémentée comme des entiers, donc je fait cette fonction pratique:

Public Shared Function Nullinator(ByVal CheckVal As String) As Integer 
    ' Receives a string and returns an integer (zero if Null or Empty or original value) 
    If String.IsNullOrEmpty(CheckVal) Then 
     Return 0 
    Else 
     Return CheckVal 
    End If 
End Function 

Ceci est par exemple typique de la façon dont il serait utilisé:

Dim Match_Innings As Integer = Nullinator(Me.TotalInnings.Text) 

Profitez-en!