日期:2014-05-19  浏览次数:20734 次

小問題,高手們幫幫忙,解決有分,萬分感謝!!!
delete   =   "DELETE   FROM   表1   WHERE   COMPANYID   = ' "   +   ddl_bu.SelectedValue.ToString()   +   " '   AND  
SO   = ' "   +   DT1.Rows[j][ "ASUS_SO "]+   " '   ";
cmd.CommandText=delete;                                                                                      
cmd.Transaction   =   trx;
cmd.ExecuteNonQuery();

insert   =   "INSERT   INTO   表1(COMPANYID,VENDORCODE,SO,PO,ITEM_SEQ,PARTNUMBER,SERIAL_NO,INVOICE_NO,UPLOAD_USER,FLAG)  
SELECT   COMPANYID,VENDORCODE,SO, ' "+strPO+   " ',ITEMSEQ,PARTNUMBER,SERIAL_NO,INVOICE_NO, ' "   +   Session[ "UserID "].ToString()   +   " ', 'U '  
FROM     表2   WHERE   COMPANYID   = ' "   +   ddl_bu.SelectedValue.ToString()   +   " '     AND   SO   = ' "   +   DT1.Rows[j][ "ASUS_SO "]   +   " '   ";
cmd.CommandText   =   insert;
cmd.Transaction   =   trx;
cmd.ExecuteNonQuery();

trx.Commit();
trx.Dispose();
cmd.Dispose();

為什么會出現這樣的錯誤:
unique   constraint   (IDX_表1)   violated

如果不delete   直接insert   會有這樣的錯誤我知道,但我已經delete   就不會有重復的index數據出現了,難道是我的trx.Commit();未執行,它沒有delete   動作???
但我trx.Commit();動作必須放在它們的后面,請高手們指教!!!!!
是什么原因,怎么解決?????????



------解决方案--------------------
對不起,前面回答有誤,事務處理,是按先后進行執行,一起提交的。因此跟事務是沒有關系的,你出現以上的原因據我分析應該是數據的問題,你可以先去掉事務部分,單步執行到delete完成,查看數據庫表表的數據是否已真正刪除,然后再執行insert。這樣應該可以查出原因。