IDataReader = DbObject.ExecuteReader(DbCommand)第二次执行后返回错误细节



我有点困惑这段代码我不知道我在哪里做,

Public Function CreateAddressDetailDb(ByVal AddressDetailList As IList(Of AddressDetail), ByVal EmployeeID As Integer) As String
    Dim ReturnCode As Boolean = False
    Dim Employeegeneratednumber As String = String.Empty
    Dim ReturnValues As New Dictionary(Of String, Object)
    Dim DbObject As Database = DatabaseFactory.CreateDatabase()
    Dim DbCommand As DbCommand = DbObject.GetStoredProcCommand("usp_AddressDetial_Create")
    Try
        If Not AddressDetailList Is Nothing And AddressDetailList.Count > 0 Then
            For Each Addressdetaulobject As AddressDetail In AddressDetailList
                With Addressdetaulobject
                    Data.AddInParameter(DbCommand, "paEmployeeID", DbType.Int32, EmployeeID, DbObject)
                    Data.AddInParameter(DbCommand, "paUpdatedBy", DbType.Int16, .Updatedby, DbObject)
                End With
                Using DataReaderObject As IDataReader = DbObject.ExecuteReader(DbCommand)
                    DataReaderObject.Read()
                    ReturnValues("Result") = DataReaderObject.Item("Result")
                    ReturnValues("Employeenumber") = DataReaderObject.Item("Employeenumber")
                    DataReaderObject.Close()
                    If Employeegeneratednumber = String.Empty Or Employeegeneratednumber = "" Then
                        Employeegeneratednumber = CType(ReturnValues("Employeenumber"), String)
                    End If
                End Using
                DbCommand.Parameters.Clear()
            Next
        End If
        If ReturnValues("Result").ToString().Equals("0") Then
            Return Employeegeneratednumber
        Else
            Return String.Empty
        End If
    Catch ex As System.Exception
        Throw
    End Try
    Return Employeegeneratednumber
End Function

当我插入一个有1个地址的Employee时,我得到的是正确的Employeegeneratednumber,但如果插入一个有2个地址的Employee,那么我得到的是与当前员工无关的旧Employeegeneratednumber此问题仅发生在生产站点而不发生在开发站点

SqlDataReader提供了一种从SQL Server数据库中读取仅向前行流的方法。

您的调用DataReaderObject.Read()将只返回第一行,而不是您必须像下面这样循环遍历可用行:

while (DataReaderObject.Read())
{
     ReturnValues("Result") = DataReaderObject.Item("Result")
     ReturnValues("Employeenumber") = DataReaderObject.Item("Employeenumber")
}

您可能需要根据您的需求更改逻辑,因为当您访问ReturnValues("Employeenumber")时,上述代码将始终返回可用行的最后一行的Employeenumber

最新更新