事务
1、创建事务的结构
SqlConnection sqlConnection = new SqlConnection(); ...初始化连接 // 开启事务 SqlTransaction sqlTransaction = sqlConnection.BeginTransaction(); // 将事务应用于Command SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = sqlConnection; sqlCommand.Transaction = sqlTransaction; try { // 利用sqlcommand进行数据操作 ... // 成功提交 sqlTransaction.Commit(); } catch(Exception ex) { // 出错回滚 sqlTransaction.Rollback(); }
2、简单例子
DataTable dt = new DataTable(); System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection("连接字符串"); System.Data.SqlClient.SqlCommand cm = new System.Data.SqlClient.SqlCommand(); cm.Connection = cnn; cnn.Open(); System.Data.SqlClient.SqlTransaction trans = cnn.BeginTransaction(); try { foreach(DataRow dr in dt.Rows) { cm.CommandText = "update [表] set [数量] = @amount where productID = @productID"; cm.Parameters.Add("@amount",SqlDbType.Int); cm.Parameters["@amount"].Value = Convert.ToInt32(dr["amount"]); cm.Parameters.Add("@productID",SqlDbType.VarChar); cm.Parameters["@productID"].Value = dr["productID"].ToString(); cm.ExecuteNonQuery(); } trans.Commit(); } catch { trans.Rollback(); } finally { cnn.Close(); trans.Dispose(); cnn.Dispose(); }
3、SQl server中的事务例子
begin transaction save transaction A insert into demo values('BB','B term') rollback TRANSACTION A create table demo2(name varchar(10),age int) insert into demo2(name,age) values('lis',1) rollback transaction insert into demo values('BB','B term') commit TRANSACTION A commit TRANSACTION
4、注意
1。事务必须在连接打开后BeginTransaction();
2.事务添加到SqlCommand(sqlCommand.Transaction = sqlTransaction; )
3、其他数据库对应做相应调整
5、原理
1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。
2.事务的语句
开始事物:BEGIN TRANSACTION
提交事物:COMMIT TRANSACTION
回滚事务:ROLLBACK TRANSACTION
3.事务的4个特性
原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,是不可折分的,事务是一个完整的操作。
一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。
隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式来影响其他事务。
持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库。
4.事务的分类(按事务的启动与执行方式,可以将事务分为3类)
显示事务 :也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务
自动提交事务:默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。
隐性事务:当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。