簡體   English   中英

交易范圍C#

[英]Transaction scope c#

我有兩個插入語句正在數據庫中插入記錄。 我使用了事務作用域,以便萬一任何語句失敗,所有記錄都不會更新。 在第二個過程中,插入操作失敗,但是它在第一條語句的數據庫中插入了記錄。 我在代碼中缺少什么?

連接字符串

<add name="Transac.Properties.Settings.TransacDbConnectionString" connectionString="Data Source=.\sqlexpress;Initial Catalog=Transac;Integrated Security=True" providerName="System.Data.SqlClient" />

private void button1_Click(object sender, EventArgs e) {
    var scopeOptions = new TransactionOptions();
    scopeOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
    scopeOptions.Timeout = TimeSpan.MaxValue;

    using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required,scopeOptions)) {
        try {

                cmd = new SqlCommand("SalesSave", con);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@BillNo", lblBillNo.Text));
                cmd.Parameters.Add(new SqlParameter("@CustName", cboCust_Name.Text.ToUpper()));
                cmd.Parameters.Add(new SqlParameter("@Mobile", txtMob.Text));
                cmd.ExecuteNonQuery();


                cmd = new SqlCommand("SubSave", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@SubBillNo", lblBillNo.Text));
                cmd.Parameters.Add(new SqlParameter("@ItemName", dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper()));
                cmd.Parameters.Add(new SqlParameter("@Qty", dataGridView1.Rows[i].Cells[1].Value.ToString()));
                //cmd.Parameters.Add(new SqlParameter("@Price", dataGridView1.Rows[i].Cells[2].Value.ToString()));
                cmd.ExecuteNonQuery();

            transactionScope.Complete();
            transactionScope.Dispose();
        }
        catch (Exception e1) {
            MessageBox.Show(e1.Message);
        }
    }
}

存儲過程1:

ALTER PROCEDURE [dbo].[SalesSave]
(  
    @SalesBillNo as varchar(50),
    @CustName as varchar(50),
    @Mobile as nvarchar(50)

)   
AS
    begin
        insert into Sales(

                         SalesBillno,
                         CustName,
                         Mobile

                         )

                values (

                         @SalesBillNo,
                         @CustName,
                         @Mobile

                         )
    end

存儲過程2

ALTER PROCEDURE [dbo].[SubSave]
@SubSalesBillNo as varchar(50),
@ItemName as nvarchar(50),
@Qty as money,
@Price as money

AS
    begin
         INSERT INTO SubSales 
         VALUES(
                @SubSalesBillNo,
                @ItemName,
                @Qty,
                @Price   
                )
    end

我相信您必須在事務范圍內打開一個數據庫連接,並使用該連接才能工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM