2011-09-30 85 views
0

我正在循環DataRowCollection的行並將每行的字段分配給變量。無論我如何施展,我總是會得到「輸入字符串格式不正確」。我只需要gapCd包含0,如果該字段爲空或否則值。看來IsDbNull沒有正確返回true。我也嘗試過沒有運氣的DbNull.Value比較。任何幫助深表感謝。處理VB.NET DataRow輸入字符串對於空值的格式不正確

Dim gapCd As Integer = IIf(IsDBNull(row("GAP_CD")), 0, row("GAP_CD")) 
+1

您確定問題不在於您在某處獲得了GAP_CD的非數字值嗎? –

+0

數據行從Oracle數據庫返回。數據庫中的列類型是Number。結果從包中返回,列可以爲空。我不認爲我正在檢查null。我甚至在分配之前嘗試過一個CInt(),但沒有骰子。有任何想法嗎? – Adam

+0

我想知道它是否真的是空的問題,或者不是第一個問題。例如,如果在查詢中過濾掉空值會發生什麼情況?你仍然遇到問題嗎?請注意,它正在進行字符串解析,這並不理想 - 當然,您應該能夠直接從數據行中轉換實際值... –

回答

0

請記住,作爲一個值類型,Integer已經初始化爲零。所以,試試這個:

Dim gapCd As Integer 
If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD")) 

,如果還是不行,現在是時候嘗試一些記錄:

Dim gapCd As Integer 
Try 
    If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD")) 
Catch Ex As Exception 
    SomeLoggingFunction(row("GAP_CD").ToString()) 
End Try 

看到這個今天再次出於某種原因,並在新的讀取是我清楚你所要做的就是從你的代碼中刪除一個「I」,將IIf()功能更改爲If()運營商並強制短路評估:

Dim gapCd As Integer = If(IsDBNull(row("GAP_CD")), 0, row("GAP_CD"))