2026-10-29 22:00:02
在编写数据库交互程序时,我们已经熟知如何运用SqlConnection类的Open()方法建立与数据库服务器的连接,并通过SqlCommand对象执行SQL语句。在设计事务处理程序时,我们需要一个SqlTransaction对象来管理事务流程。虽然我们可以直接尝试创建SqlTransaction对象,但需要注意的是,SqlTransaction类并没有公共的构造函数,所以初始化时需要使用SqlConnection的BeginTransaction()方法,如下所示:
//DoTran.cs
public void DoTran()
{
SqlConnection myConn = GetConn();
myConn.Open();
SqlCommand myComm = new SqlCommand();
SqlTransaction myTran;
// 创建一个事务
myTran = myConn.BeginTransaction();
try
{
// 将连接和事务对象绑定
myComm.Connection = myConn;
myComm.Transaction = myTran;
myComm.CommandText = "USE pubs";
myComm.ExecuteNonQuery(); // 更新数据
// 将计算机类图书的royalty更新
myComm.CommandText = "UPDATE roysched SET royalty = royalty * 1.10 WHERE title_id LIKE 'Pc%'";
myComm.ExecuteNonQuery();
// 提交事务
myTran.Commit();
}
catch (Exception err)
{
throw new ApplicationException("事务操作出错,系统信息:" + err.Message);
}
finally
{
myConn.Close();
}
}
这段代码展示了如何在C#中正确地初始化并使用SqlTransaction。开始事务的步骤是通过SqlConnection的BeginTransaction()方法,然后将返回的SqlTransaction对象绑定到SqlCommand的Transaction属性上。提交事务则通过调用myTran.Commit()来完成。在实际操作中,我们需要确保在事务的整个过程中,数据库操作都是在事务的控制之下进行的,否则可能会导致数据不一致或事务失效。在后续章节,我们将深入探讨事务的隔离级别和事务管理的最佳实践。
事务机制:数据库特有的术语,单个逻辑工作单元执行的一系列操作,同步发生数据更新时,防止数据的不一致。