ADO.NETでトランザクションを使用してデータベースの読み書きを行う方法

6006 ワード

トランザクションを使用するのは一般的にデータの書き込みであり、データの読み取りには一般的にこの品物は必要ありません.
1つ目の方法:
ストアド・プロシージャの使用:
名前の通り、格納中に変数を定義し、トランザクションの開始、終了、エラーロールバック、ADOを定義します.NETでストレージ・プロシージャを正常に呼び出す方法でよい
    /// <summary>
    ///            
    /// </summary>
    /// <param name="conn">     </param>
    /// <param name="id">     </param>
    private void TransactionDB(SqlConnection conn, int id)
    {
        SqlCommand cmd = new SqlCommand("spAddOrderxxxx", conn);//           
        cmd.CommandType = CommandType.StoredProcedure;//           

        cmd.Parameters.Add("@CustomerID", SqlDbType.Int).Value = id;//    

        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Trace.Write(ex.Message);
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
            {
                conn.Close();
            }
        }
    }

トランザクションはストレージ中
CREATE PROcedure [spAddxxxx]
    @CustomerID int
AS
    Begin Transaction
    ..........       
commit transaction
return

ErroHandler:
rollback transaction
return

 
 
第2の方式:ADOを採用する.NETが持つトランザクションの扱い方(トランザクションをサポートしていないデータベースに対処できますよ)
   private void Transaction(SqlConnection conn)
    {
        SqlCommand cmd = new SqlCommand("xxxxx", conn);//xxxxx SQL  

        SqlTransaction transaction = null;

        try
        {
            conn.Open();
            transaction = conn.BeginTransaction();
            cmd.Transaction = transaction;//      
            cmd.ExecuteNonQuery();
            cmd.CommandText = "xxxxxxxxxxyyyyy";//
            cmd.ExecuteNonQuery();

            transaction.Commit();//OK,        
        }
        catch (Exception ex)
        {
            transaction.Rollback();//    
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
            {
                conn.Close();
            }
        }

    }

最後に、これがトランザクションを使用する2つの方法です.大量のデータ书き込みを行う场合は、事务に适していますよ.具体的な原理~SQLの本をめくりましょう.