2010-09-02 34 views
13

Tengo una función de actualización que actualiza una tabla db de servidor SQL a través de un conjunto de datos. Uno de los campos en la tabla es un número entero y acepta valores nulos. Entonces, cuando estoy rellenando la función de actualización, necesito una forma de ingresar un nulo cuando la función quiere un entero.Hacer un número entero nulo

Traté de hacerlo de esta manera, pero _intDLocation = "" se emite una excepción

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 

Respuesta

29

enteros no se puede establecer en Null. Debe hacer que el entero sea "anulable" al agregar un signo de interrogación después de la palabra Entero. Ahora _intDLocation ya no es un número entero normal. Es una instancia 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 

Más adelante, si desea comprobar NULL puede utilizar esta práctica, la sintaxis legible:

If _intDLocation.HasValue Then 
    DoSomething() 
End If 

En algunos casos será necesario para acceder al valor como un entero real, no una entero numerable. Para esos casos, sólo tiene que acceder a

_intDLocation.Value 

Lea todo sobre anulable here.

+2

+1 ¿Olvidó por completo que puede usar 'Entero?'. Agradable y conciso. –

+2

Para agregar a esta excelente respuesta: _intDLocation será en realidad una instancia de Nullable (Of Integer). Consulte la documentación de Nullable aquí: http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx –

+1

Gracias, Etienne. Agregaré eso en. – Larsenal

4

Prueba esto:

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

Mi aplicación utiliza una gran cantidad de etiquetas que comienzan en blanco (propiedad de texto), pero necesita ser incrementado como enteros, así que hice esta función útil:

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 

Ésta es ejemplo típico de cómo se usaría:

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

¡Disfrútalo!

Cuestiones relacionadas