我有点困惑这段代码我不知道我在哪里做,
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
。