想做一个采购订单编辑的界面,单据分为订单头和订单明细,数据表如下:/*==============================================================*/
/* Table: 订单头                                                */
/*==============================================================*/
create table tb_POList (
   POID                 int                  identity,
   PONO                 varchar(24)          not null,
   VendorID             varchar(64)          not null,
   PODate               datetime             null,
   POStatus             varchar(16)          null,
   PODesc               varchar(128)         null,
   constraint PK_TB_POLIST primary key (POID)
)
go/*==============================================================*/
/* Table: 订单明细                                              */
/*==============================================================*/
create table tb_POLine (
   POLineID             int                  identity,
   POID                 int                  not null,
   GoodsID              varchar(128)         not null,
   Qty                  smallint             not null,
   constraint PK_TB_POLINE primary key (POLineID)
)
go原来用的是存储进程,先保存订单头,并返回POID,然后赋值给订单明细,并一条一条循环保存订单明细。
用这个办法不知道如何来编辑原有订单,所以现在想换别的方式来保存单据。特发此帖,想看看有没有别的办法来处理?

解决方案 »

  1.   

    用类生成Sql,然后把Sql在一个事务里执行
      

  2.   

    可以用语句
    insert into table values (...) select @@identity
    语句同时插入并获得插入数据的标识主键。
    用Sqlcommand.ExecuteScalar执行
    然后在执行其他的insert语句
    最好使用SqlTransaction执行多条insert语句。
      

  3.   

    通过transaction批处理sql语句
    或传递POID ,POLineID到存储过程,通过charindex分割POLineID修改明细数据
    通过POID查询明细数据,用cursor游标遍历修改 
      

  4.   

    while(len(@XTBH)>0)
       begin
           if(charindex(',',@XTBH)>0)
             begin
    set @J=substring(@XTBH,1,charindex(',',@XTBH)-1)
    set @XTBH=substring(@XTBH,len(@J)+2,len(@XTBH))
                    
                         
      end
           else
              begin
                    set @J=@XTBH
                   
                 
         
                    break
              end
       end