LinkDataBase.myConnection.Open(); SqlTransaction myTrans = LinkDataBase.myConnection.BeginTransaction(); SqlCommand myCommand = LinkDataBase.myConnection.CreateCommand(); myCommand.Transaction = myTrans; try { myCommand.CommandText ="UPDATE  库存信息 SET 商品总价='"+tm+"',库存数量='"+tt+"'  where  仓库名称='"+this.textBox7.Text.Trim()+"' and 商品名称='"+this.comboBox3.Text.Trim()+"' "; myCommand.ExecuteNonQuery();//更新拨出库房
myCommand.CommandText ="UPDATE  库存信息 SET 商品总价='"+tw+"',库存数量='"+tt2+"'  where  仓库名称= '"+this.comboBox2.Text.Trim()+"' and 商品名称='"+this.comboBox3.Text.Trim()+"' "; myCommand.ExecuteNonQuery();//更新拨入库房
myCommand.CommandText ="insert into 商品调拨信息(调拨单据号,拨出库房信息,拨入库房信息,商品名称,商品数量,调拨单操作员,调拨时间,调拨原因) values ('"+this.textBox1.Text.Trim()+"','"+textBox7.Text.Trim()+"','"+this.comboBox2.Text.Trim()+"','"+this.comboBox3.Text.Trim()+"','"+this.textBox2.Text.Trim()+"','"+textBox8.Text.Trim()+"','"+this.dateTimePicker1.Value.ToShortDateString()+"','"+this.textBox3.Text.Trim()+"') "; myCommand.ExecuteNonQuery();//插入新的调拨信息 myTrans.Commit();//提交事务处理
MessageBox.Show("商品调拨成功");
} catch(Exception ee) { myTrans.Rollback(); MessageBox.Show ("商品调拨失败,请重"); } finally { LinkDataBase.myConnection.Close(); }(客户有5个店 一个总店 4个分店 每个店有独立的仓库 所以需要用调拨 但是出现如下问题:)
现在程序在我本机测试一点问题都没有?? 而且试过N次了都没问题....
但是装到客户店里面的 "服务器"   上使用也是在本机操作. 用了几个月了就出现几次问题
================================================================================
好几次出现了           更新拨出库房成功     更新拨入库房无修改  插入新的调拨信息成功
还有几次               更新拨出库房无修改   更新拨入库房无成功  插入新的调拨信息成功(就出现了几次,但是客户就不管了就看小票了,库存就不对了,一个月以后盘点.汗~~~比了出问题了)
这样一来 打印出来调拨小票上面每次都会有调拨信息了. 但是出现了几次调拨失误,那样库存量都不对了, 是不是有的写法有问题??? 高手指点一下... 
是不是 "事务处理" 对 insert into 语句 提交100% 成功?? 对 UPDATE 语句提交不是100%成功吗?高手指点一下... 高手指点一下... 高手指点一下... 高手指点一下... 

解决方案 »

  1.   

    在所有的
    myCommand.ExecuteNonQuery();
    后面加上
    myTrans.Commit();
      

  2.   

    出现了更新的错误,但是try catch没有捕捉到,说明不是严重的错误。
    觉得应该查查数据。
    我觉得你可以把try catch 去掉,看看有什么错误。
      

  3.   

    UPDATE不成功,INSERT成功。应检查UPDATE语句中的WHERE条件。eg:当你的库存信息里面并没有当前商品时,将不会更新库存信息
      

  4.   

    在所有的
    myCommand.ExecuteNonQuery();
    后面加上
    myTrans.Commit();这样就可以了??
    但是没报错误啊~~
      

  5.   

    如果执行的是多条command,那你用存储来操作,而不要用修改commandtext来操作,这样尤其在执行第二个command出现错误的时候,无法回滚第一个command地执行。