一张订单 分为单据头跟单据体
在保存订单的时候
单据头的内容放入A表 单据体的内容放入B表
A表与B表通过Fid字段关联`问题是
我在保存的时候单据头是一条sql语句
单据体为一组[/color[color=#000080]](因为这个订单里面可能是多个商品,比如显示器要不得2台、光驱要5个,
这个订单就有两行数量)
sql语句
如果单据头有一条数量单据体也是一条数据的话那还好处理`用个事务`可以保证都能保存进去
但是数量行数多了我应该怎么处理呢 
比如我先保存了单据头~保存单据体最后一条数据的时候 断网了` 没有保存进去`但是之前的已经保存成功了`这样就造成
订单信息不完整,请问这个应该怎么搞定呢?只求思路不要代码,请快捷键高手不要粘来粘去了`

解决方案 »

  1.   

    给个例子你看看public bool AddOders(string cid,string uid,Dictionary<int, ordersinfo> oi,string beizhu)
        {
            SqlConnection con = DBhelp.GetCon();
            SqlCommand cmd = new SqlCommand();
            SqlTransaction trans = con.BeginTransaction();
            cmd.Connection = con;
            cmd.Transaction = trans;
            try
            {
               //订单表
                cmd.CommandText = string.Format("insert into orders (customernum, ordersTime,userid,ordersdescribe) values ('{0}',Getdate(),'{1}','{2}') select @@identity", cid, loginid, beizhu);
                oid=Convert.ToInt32(cmd.ExecuteScalar());            //添加订单明细表
                string sql = " insert into ordersinfo (ordersid, productid, productnum, productDescribe)";
                Dictionary<int, ordersinfo> dic = oi;
                Dictionary<int, ordersinfo>.ValueCollection orin = dic.Values;
                foreach (ordersinfo o in orin)
                {                sql += "  select " + oid + ",'" + o.Productid + "','" + o.Productnum + "','" + o.ProductDescribe + "'  union";            }
                sql = sql.Substring(0,sql.Length-5);            cmd.CommandText = sql;
                cmd.ExecuteNonQuery();            trans.Commit();
                return true;
            }
            catch
            {
                trans.Rollback();
            }
            finally
            {
                con.Close();
            }
            return false;
        }
      

  2.   

    事务里面可以有多条SQL语句啊,最后都执行完了再提交事务,否则回滚。
      

  3.   

    事务里面不仅可以有多条SQL,而且事务还可以相互嵌套,相互调用。。