2016-07-15 11 views
0

Dies ist der Code, der wirft diesen Fehler zu sein scheint:Konvertierung vom Typ ‚DBNull‘ ‚Integer‘ zu geben ist nicht gültig, wenn sie ein Integer in VB.net Casting

Dim myDataTable As New DataTable() 
Using myReader As SqlDataReader = myCommand.ExecuteReader() 
    myDataTable.Load(myReader) 
End Using 

Dim minPos As Integer = myDataTable.Compute("Min(position)", String.Empty) 
Dim maxPos As Integer = myDataTable.Compute("Max(position)", String.Empty) 


Dim dblData() As Double = Nothing 
For iPosition As Integer = minPos To maxPos 
    Dim dvDataSlice = New DataView(myDataTable, String.Format("runid>={0} and runid<={1} and position={2} and value is not null", minRunId, maxRunId, iPosition), "value", DataViewRowState.OriginalRows) 
    Dim nobs As Integer = dvDataSlice.Count 

Anscheinend dieser Code verwenden um in Visual Studio 2010 zu arbeiten, aber seit der Migration zu Visual Studio 2015 wird diese Ausnahme ausgelöst. Ich übernehme die Code-Unterstützung und bin ein wenig rostig mit VB.net

Antwort

0

null Werte aus der Datenbank erscheinen in ADO.Net als Instanzen von DBNull. Meine Vermutung ist, dass Ihre Datentabelle leer ist, was dazu führt, dass die Abfragen min() und max()null zurückgeben. Eine Möglichkeit, dies zu lösen, besteht darin, das Ergebnis stattdessen in Object zu speichern und nur dann in Integer zu konvertieren, wenn das Ergebnis nicht DBNull lautet (Sie können dafür die Funktion IsDbNull() verwenden).