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书吧。