ADO.NET中使用事务进行数据库读写的办法

使用事务一般是进行数据写入,数据读取一般是不需要这货的

第一种办法:

使用存储过程:

顾名思义,在存储过程中定义好变量,定义好事务开始,结束,错误回滚然后在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

第二种方式:采用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();
            }
        }

    }

结束,这就是使用事务的两种方法。在进行大量数据写入的情况下很适合用事务哦,具体原理~去翻SQL书吧。

原文地址:https://www.cnblogs.com/UliiAn/p/3207436.html