PROCEDURE GetByID
(
p_PreOrderID IN PreOrder.PreOrderID%type,
  outCur_PreOrder OUT sys_refcursor,--预订单游标
  outCur_PreOrderCargo OUT sys_refcursor  --预订单货物游标
)
IS
BEGIN
    OPEN outCur_PreOrder FOR
SELECT
PreOrderID,
CustomerNO,
SendType,
Shipper,
ShipperTEL,
ShipperMobile,
ShipperCity,
ShipperAddress,
Receiver,
ReceiverTEL,
ReceiverMobile,
ReceiverAddress,
StartBranch,
DestinationBranch,
IsUrgent,
VehicleModel,
GetCargoFee,
Freight,
AgencyFundAmount,
AgencyFundServiceCharge,
CargoWorth,
CargoInsuranceRate,
InsuranceFee,
DeliverFee,
ShipperFreight,
ShipperdClearingForm,
ReveiverFreitht,
ReveiverClearingForm,
BackReceiptType,
BackReceiptNO,
BackBillNumber,
LoadingMode,
GetCargoAddress,
RequirePickTime,
GetCargoArea,
BigSmallTruck,
PickUpMode,
DeliverCargoArea,
Status,
PreOrderSource,
BillingEmployee,
BillingTime,
ConsignBranch,
Marketer,
Inputerd,
Note
FROM PreOrder
WHERE PreOrderID = p_PreOrderID;
    --打开预订单货物游标
  open outCur_PreOrderCargo for
  select * from PreOrderCargo 
  where PreOrderID = p_PreOrderID;END GetByID;调用代码
 public PreOrder GetPreOrderById(string p_PreOrderID)
        {
            string storedProcName = "PreOrderManagement.GetByID";
            OracleParameter[] parameters = {
                new OracleParameter("p_PreOrderID",OracleDbType.Varchar2),
                new OracleParameter("outCur_PreOrder",OracleDbType.RefCursor,ParameterDirection.Output),
                new OracleParameter("outCur_PreOrderCargo",OracleDbType.RefCursor,ParameterDirection.Output)};            parameters[0].Value = p_PreOrderID;
            OracleDataReader dr = null;            PreOrder preOrder = new PreOrder();
            try
            {
                dr = DbHelperOra.RunProcedureReader(storedProcName, parameters);
                while (dr.Read())
                {
                    preOrder = readerBind(dr);
                }
                if (dr.NextResult())
                {
                    while (dr.Read())
                    {
                        preOrder.preOrderCargo.Add(PreOrderCargoDAO.ReaderBind(dr));
                    }
                }
                return preOrder;            }
            catch (OracleException ex)
            {
                Logger.LogError("获取预订单失败", ex);
                throw new SHWLException("获取预订单失败", ex);
            }
            finally
            {
                if (dr != null)
                {
                    dr.Dispose();
                    parameters[1].Dispose();
                    parameters[2].Dispose();
                }
            }
           
        }
--------------------
  if (dr.NextResult())
                {
                    while (dr.Read())
                    {
                        preOrder.preOrderCargo.Add(PreOrderCargoDAO.ReaderBind(dr));
                    }
                }
执行到 while (dr.Read())时跳出,faint在SQLPLUS中可以查询到有二条PreOrderID相关的记录!!!!!!
不行为何。调试了很久,。
SOS