我有以下存储过程:
CREATE PROCEDURE [dbo].[master_accounting_invoice_change]
(
@accinvoiceuid uniqueidentifier,
@invoicenumber nvarchar(50),
@businessname nvarchar(150),
@taxid nvarchar(20),
@total money,
@subtotal money,
@taxamount money,
@discountamount money,
@invoicedate datetime,
@createddate datetime,
@newfolio int OUTPUT
)
AS
IF NOT EXISTS (SELECT accinvoiceuid FROM dbo.accounting_invoice WHERE accinvoiceuid = @accinvoiceuid )
BEGIN
/* GET NEXT FOLIO FOR INVOICE */
SELECT @newfolio = ISNULL(MAX(foliocurrent),0) + 1
FROM dbo.accounting_sender_folios
WHERE accsenderuid = @accsenderuid
AND isactive = 1;
exec master_accounting_invoice_insert
@accinvoiceuid,
@invoicenumber,
@businessname,
@taxid,
@total,
@subtotal,
@taxamount,
@discountamount,
@comissionamount,
@invoicedate,
@createddate
/* UPDATE NEXT FOLIO FOR INVOICE */
UPDATE dbo.accounting_sender_folios
SET foliocurrent = @newfolio
WHERE accsenderuid = @accsenderuid
AND isactive = 1;
END
ELSE
BEGIN
SET @newfolio = @folio;
exec master_accounting_invoice_update
@accinvoiceuid,
@invoicenumber,
@businessname,
@taxid,
@total,
@subtotal,
@taxamount,
@discountamount,
@comissionamount,
@invoicedate,
@createddate
END
现在,在我的 C# 应用程序中,我调用存储过程以保存更改,但问题是当异常发生时对折电流没有回滚,然后增量变量被更新并保存。
一切都回滚,除了:
/* UPDATE NEXT FOLIO FOR INVOICE */
UPDATE dbo.accounting_sender_folios
SET foliocurrent = @newfolio
WHERE accsenderuid = @accsenderuid
AND isactive = 1;
这是 C# 应用程序中的代码。正在工作,回滚事务正在工作,但它不会回滚增量作品集。
DbConnection conn = db.CreateConnection();
conn.Open();
DbTransaction trans = conn.BeginTransaction();
try{
using (DbCommand cmd1 = db.GetStoredProcCommand("master_accounting_invoice_change"))
{
db.AddInParameter(cmd1, "accinvoiceuid", DbType.Guid, dr["accinvoiceuid"]);
.....
.....
.....
db.ExecuteNonQuery(cmd1);
newFolio = Convert.ToInt32(db.GetParameterValue(cmd1, "newfolio"));
}
}catch(Exception ex){
// roll back transation
trans.Rollback();
}
关于如何解决这个问题或为什么会发生的任何线索?
提前感谢任何帮助。
亚历杭德罗