任何想法这个代码有什么问题.
这是异常信息:
system.invalidCastException: Unable to cast object of type ‘system.int32’ to type ‘System.String’.
at System.Data.sqlClient.sqlBuffer.get_String()
at Read_CPT_Setting(ObjectMaterializer`1 )
at System.Data.Linq.sqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)
at CPT.Service.SettingLinqProvider.GetSettingFromDBById(Int32 SettingId)
码:
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,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包含以下消息中提到的所有settingID的所有行.
结果:
场景1:
异常对象 – 没有为SettingID = 142176检索数据 – 内部上下文 – 使用SettingID = 142176查询 – 在SingleOrDefault之前 – – 在SingleOrDefault之后 – – DBSetting什么都不是
不寻常的对象 – MRDD解决方案 – 没有检索到SETID = 142176的数据输入 – 内部上下文 – 使用SettingID = 142176查询 – 在SingleOrDefault之前 – – 在SingleOrDefault之后 – – DBSetting什么都不是
场景2
SettingID = 138145– ENTER – 内部上下文中的异常异常 – 使用SettingID = 138145查询 – 在SingleOrDefault之前 – – 在SingleOrDefault之后 – – 指定的强制转换无效.
不寻常的对象 – MRDD解决方案 – 没有检索到SETID = 138145的数据 – 内部上下文 – 使用SettingID = 138145查询 – 在SingleOrDefault之前 – – 在SingleOrDefault之后 –
场景3
SettingID = 164638– ENTER – 内部上下文中的异常异常 – 使用SettingID = 164638查询 – 在SingleOrDefault之前 – –Index超出数组范围.
不寻常的对象 – MRDD解决方案 – 没有检索到SETID = 164638的数据输入 – 内部上下文 – 使用SettingID = 164638查询 – 在SingleOrDefault之前 –
经过分析后我发现3/4服务器没有最新的框架更新,因此服务器管理员已经为.Net Framework 4更新了具有可靠性更新1的机器,它似乎已经解决了这个问题.没有进行任何代码更改.自更新以来已经过了两周,并且在此代码块中没有看到任何一个例外.
原文地址:https://www.jb51.cc/vb/255479.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。