Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 无法强制转换类型为';System.Int32';输入';System.String';_Vb.net_Linq_Linq To Sql_Casting - Fatal编程技术网

Vb.net 无法强制转换类型为';System.Int32';输入';System.String';

Vb.net 无法强制转换类型为';System.Int32';输入';System.String';,vb.net,linq,linq-to-sql,casting,Vb.net,Linq,Linq To Sql,Casting,在下面的代码中,我在.SingleorDefault()处得到了一个零星的“无法强制转换类型为”System.Int32“的对象,使其类型为”System.String“异常。它工作9/10次,但随机抛出异常。我确保传递的SettingID没有空值,并且SettingID的表中数据始终存在,并且我始终以整数形式传递SettingID 你知道这个代码有什么问题吗 以下是异常信息: System.InvalidCastException:无法将类型为“System.Int32”的对象强制转换为类型为

在下面的代码中,我在.SingleorDefault()处得到了一个零星的“无法强制转换类型为”System.Int32“的对象,使其类型为”System.String“异常。它工作9/10次,但随机抛出异常。我确保传递的SettingID没有空值,并且SettingID的表中数据始终存在,并且我始终以整数形式传递SettingID

你知道这个代码有什么问题吗

以下是异常信息:

System.InvalidCastException:无法将类型为“System.Int32”的对象强制转换为类型为“System.String”。
在System.Data.SqlClient.SqlBuffer.get_String()上 在读取CPT设置时(ObjectMaterializer`1)
位于System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
在System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)中
在System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)中
在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
    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拥有下面消息中提到的所有设置ID的所有行。

结果:

场景1:

异常对象-未检索到SettingID=142176的数据ENTER-内部上下文-SettingID=142176的查询--在SingleOrDefault之前----在SingleOrDefault之后--DBSetting为Nothing

异常对象-MRDD解决方案-未检索到SettingID=142176 ENTER的数据-内部上下文-SettingID=142176的查询-在SingleOrDefault之前---在SingleOrDefault之后---DBSetting什么都不是

场景2

SettingID=138145--ENTER-Inside-Context-SettingID=138145的查询--SingleOrDefault之前--SingleOrDefault之后----指定的强制转换无效

异常对象-MRDD解决方案-未检索到SettingID=138145的数据输入-内部上下文-使用SettingID=138145进行查询-在SingleOrDefault之前--SingleOrDefault之后--

场景3

SettingID=164638——在SingleOrDefault--Index超出数组边界之前,ENTER-Inside-Context-Querying With SettingID=164638——出现异常

异常对象-MRDD解决方案-未检索到设置ID=164638的数据输入-内部上下文-使用设置ID=164638进行查询-在SingleOrDefault之前--

您应该检查

From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s

不返回多个对象。也许它永远不应该,但这可能就是问题所在。

你必须使用
Convert.ToString()


希望它能解决您的问题。

使用single而不是singleordefault


这就是我们最近在工作中解决类似情况的方法。

我已经获得了Microsoft的支持,我们已经启用了debugdiag跟踪和分析转储文件,但没有任何进展

经过大量分析,我发现3/4服务器没有最新的框架更新,因此服务器管理员使用.Net framework 4的可靠性更新1更新了机器,似乎解决了问题。未进行任何代码更改。更新已经两周了,在此代码块中没有看到任何异常


我就为了这个浪费了一个月。该死的。有时候,这不是代码

数据库中的SettingID列是什么类型?您的
CPT\U设置
类的属性和db表的列之间是否存在类型不匹配?Like:列是文本,对应的属性是int.Nope。DB列和DBML/类属性之间没有不匹配。我确保第二组眼睛的设置是正确的。SettingID是一个INT NOT NULL列。我知道VB.NET不区分大小写,但由于您的参数列为
ByVal SettingID as Integer',那么LINQ查询不应该读为:
Where s.SettingID=SettingID `?“CPT_设置”类型也可能包含答案。该类型上是否有一个属性需要为Null而不是Null?在VB.NET中,我一直遇到这个强制转换问题,试图使用LINQ to对象将数据转储到一个不具有可空类型的对象中。或者可能有一个varchar类型返回的空字符串隐式转换为整数属性。SettingID是主键,因此它将只返回一个值。我还尝试了.SingleOrDefault。这个错误似乎又出现了。我也试过了,但没有用
From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s