我收到一個零星的'無法轉換類型爲'System.Int32'的對象來在.SingleorDefault類型'System.String'異常()在下面的代碼。它的工作原理是9/10次,但隨機拋出一個異常。我確保我傳遞的SettingID沒有空值,表中的數據總是存在於設置ID中,而且我始終將設置ID作爲整數傳遞。無法投入'System.Int32'類型的對象來鍵入'System.String'
任何想法這段代碼有什麼問題。
這裏是異常的信息:
System.InvalidCastException:無法轉換類型 'System.Int32' 的對象爲類型 'System.String'。
在System.Data.SqlClient.SqlBuffer.get_String()
在Read_CPT_Setting(ObjectMaterializer`1)
在System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
在System.Linq的。 Enumerable.SingleOrDefault [TSource](IEnumerable`1源)
在System.Linq.Queryable.SingleOrDefault [TSource](IQueryable`1源)
在CPT.Service.SettingLinqProvider.GetSettingFromDBById(的Int32 SettingId)
CODE:
Public Function GetSettingFromDBById(ByVal SettingId As Integer) As ReturnObject(Of Model.ISettingBase)
Dim retObj As New ReturnObject(Of Model.ISettingBase)
Dim dbSetting As CPT_Setting
Try
Dim _cptDB As New CPT.Data.CPTLinqRepository.DB(_connString)
Using _cptDB
dbSetting = (From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s).SingleOrDefault
If dbSetting IsNot Nothing Then
retObj.ReturnValue = Mapping.Setting.MapDBToModel(dbSetting)
End If
End Using
Catch ex As Exception
retObj.ReturnValue = Nothing
retObj.AddErrorMessage("Error returning the site: " & ex.Message)
_log.Error(ex.Message, _userId, ex)
End Try
If retObj.ReturnValue Is Nothing Then
retObj.AddErrorMessage("Site Not Found.")
End If
Return retObj
End Function
我已經更新了每一行後的一些記錄在地方上面的代碼。
Public Function GetSettingFromDBById(ByVal SettingId As Integer) As ReturnObject(Of Model.ISettingBase)
Dim retObj As New ReturnObject(Of Model.ISettingBase)
Dim dbSetting As CPT_Setting
Dim SettingsList As New List(Of CPT_Setting)
Dim errStr As String = " ENTER "
Try
Dim _cptDB As New CPT.Data.CPTLinqRepository.DB(_connString)
Using _cptDB
errStr &= " - Inside Context "
If _cptDB Is Nothing Then
errStr &= " - With Context is Nothing "
_log.Error("Unusual Object - Unable to create connection object - Object is NOTHING", _userId)
End If
If System.DBNull.Value.Equals(_cptDB) Then
errStr &= " - With Context is NULL "
_log.Error("Unusual Object - Unable to create connection object - Object is NULL", _userId)
End If
errStr &= " - Querying With SettingID = " & SettingId.ToString()
Dim dbSettingTemp = (From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s)
If dbSettingTemp Is Nothing Then
errStr &= " -- Nothing is returned from DB - Object is NOTHING -- "
_log.Error(errStr, _userId)
End If
If System.DBNull.Value.Equals(dbSettingTemp) Then
errStr &= " -- Nothing is returned from DB - Object is NULL -- "
_log.Error(errStr, _userId)
End If
errStr &= " -- Before SingleOrDefault -- "
dbSetting = dbSettingTemp.SingleOrDefault
errStr &= " -- After SingleOrDefault -- "
If dbSetting IsNot Nothing Then
If System.DBNull.Value.Equals(dbSetting) Then
errStr &= " - NULL OBJECT RETURNED - Before Mapping "
_log.Error("Unusual Exception - NULL OBJECT RETURNED " & errStr, _userId)
End If
retObj.ReturnValue = Mapping.Setting.MapDBToModel(dbSetting)
errStr &= " - After Mapping With SettingID=" & dbSetting.SettingId.ToString() & " SettingName=" & dbSetting.SettingName.ToString() & " StartDate=" & dbSetting.StartDate.ToShortDateString() & " EndDate=" & dbSetting.EndDate.ToShortDateString()
Else
errStr &= " - DBSetting Is Nothing "
_log.Error("Unusual Object - No Data Retrieved for SettingID=" & SettingId.ToString() & " " & errStr, _userId)
End If
End Using
Catch ex As Exception
retObj.ReturnValue = Nothing
retObj.AddErrorMessage("Error returning the site: " & ex.Message)
_log.Error("Unusual Exception for SettingID=" & SettingId.ToString() & "--" & errStr & "--" & ex.Message, _userId, ex)
End Try
If retObj.ReturnValue Is Nothing Then
retObj.AddErrorMessage("Site Not Found.")
_log.Info("Unusual Object - MRDD Solutions - No Data Retrieved for SettingID=" & SettingId.ToString() & " " & errStr, _userId)
End If
Return retObj
End Function
記住:DB有下面的消息中提到的所有settingIDs所有行。
結果:
方案1:
對象異常 - 未檢索到數據的SettingID = 142176 ENTER - 內部語境 - 詢問與SettingID = 142176 - 之前的SingleOrDefault - - 在SingleOrDefault之後 - - 數據集沒有任何數據
不尋常的對象 - MRDD解決方案 - 沒有數據檢索設置ID = 142176 ENTER - 內部上下文 - 查詢設置ID = 142176 - SingleOrD EFAULT - - 的SingleOrDefault後 - - DBSetting是沒有
方案2
爲SettingID = 138145-- ENTER不尋常的例外 - 內語境 - 詢問與SettingID = 138145 - 之前的SingleOrDefault - - - SingleOrDefault後 - - 指定的強制轉換無效。
對象異常 - MRDD解決方案 - 未檢索到數據的SettingID = 138145 ENTER - 內部語境 - 詢問與SettingID = 138145 - 之前的SingleOrDefault - - 的SingleOrDefault後 -
方案3
異常例外爲SettingID = 164638-- ENTER - 內部上下文 - 詢問與SettingID = 164638 - 的SingleOrDefault前 - --index是陣列的邊界之外。
對象異常 - MRDD解決方案 - 未檢索到數據的SettingID = 164638 ENTER - 內部語境 - 詢問與SettingID = 164638 - 之前的SingleOrDefault -
數據庫中的SettingID列是什麼類型? – 2012-03-21 02:31:46
您的任何'CPT_Setting'類的屬性和數據庫表的列之間的類型是否存在不匹配?如:一列是文本,相應的屬性是int。 – 2012-03-21 10:58:07
沒有。 DB列和DBML/Class屬性之間沒有不匹配。我確定第二組眼睛是正確的。 – ravi 2012-03-21 15:40:25