2015-12-30 37 views
0

我在實體類中具有以下代碼。它會在Entity.Designer.vb中引發異常,說明Table Patient中的值爲DbNull。從'DBNull'類型到'Integer'類型的轉換在設計器中無效

If _patientDetails.ID > 0 Then 
     If _patientDetails.Amount = EntityEnums.Patient.Existing 
      Then       
       _patientDetails.SetAmountNull() 
     End If 
    Catch ex As Exception 
     _patientDetails.SetAmountNull() 
    End Try 

End If 

它進入下面的「返回」行並拋出異常。

Public Property Amount() As Integer 
    Get 
     Try 
      Return CType(Me(Me.tablePatient.AmountIDColumn),Integer) 
     Catch e As Global.System.InvalidCastException 
      Throw New Global.System.Data.StrongTypingException("The value for column 'AmountIDColumn' in table 'Patient' is D"& _ 
        "BNull.", e) 
     End Try 
    End Get 
    Set 
     Me(Me.tablePatient.AmountIDColumn) = value 
    End Set 
End Property 

異常詳細信息是

「」類型的第一次機會異常發生在Microsoft.VisualBasic.dll中

其他信息:從類型轉換'的DBNull爲鍵入「整數」無效。

+0

您的第一個區塊似乎不完整/不合格。 – Plutonix

+0

@Plutonix:嗨,Plutonix,我只是改了一些名字,就是這樣。這是dbnull到整型轉換的錯誤。他們都有這個地方,但我擔心只有在這個地方它會拋出錯誤,因爲我使用了這一列。任何建議請解決? – Learner

+0

@Plutonix:更正了它 – Learner

回答

1

最終確實:你不能從DBNull轉換爲整數。您需要檢查DBNull,以及特殊情況,無論您想在該場景中發生什麼情況。也許把它當作0或-1,或許做一些不同的事情:只有你知道。

如果這是C#,我會用:

var val = tablePatient.AmountIDColumn; 
if(val is DBNull) { 
    // special-case; return 0, perhaps 
} else { 
    // cast, etc 
    return (int)val; // or Convert.ChangeType, if it is something exotic 
} 

(我VB-foo是弱的,所以我會離開這個翻譯作爲練習讀者)

0

試試這個:

If _patientDetails.ID > 0 Then 
     If (Not _patientDetails.IsAmountNull) AndAlso (_patientDetails.Amount = EntityEnums.Patient.Existing) Then 
      _patientDetails.SetAmountNull() 
     End If 
    End If   

    Catch ex As Exception 
     _patientDetails.SetAmountNull() 
    End Try 
相關問題