--
--11.6.1节示例
--
创建基础表
CREATE TABLE t1 --创建一个测试表t1
(
c1 INT PRIMARY KEY,
c2 INT NOT NULL,
CONSTRAINT CK_t1c2 CHECK(c2>=0) --CHECK约束
)
GO
CREATE TABLE t2 --创建一个测试表t2
(
c1 INT PRIMARY KEY,
c2 INT NOT NULL,
CONSTRAINT CK_t2c2 CHECK(c2>=0) --CHECK约束
)
GO
--接下来插入示例数据
INSERT INTO t1 VALUES(1,50);
INSERT INTO t2 VALUES(1,50);
使用SqlTransaction进行事务处理
using (SqlConnection conn = new SqlConnection(sqlconn))//申明一个连接
{
conn.Open();//打开连接
SqlTransaction trans = conn.BeginTransaction();//使用SqlConnection创建事务
try
{
string sql = "update t1 set c2=c2+30 where c1=1";//取款现金增加30元
SqlCommand cmd = new SqlCommand(sql, conn, trans);
cmd.ExecuteNonQuery();//执行现金增加30的操作
string sql2 = "update t2 set c2=c2-30 where c1=1";//取款时存款减少30元
SqlCommand cmd2 = new SqlCommand(sql2, conn, trans);
cmd2.ExecuteNonQuery();//执行存款减少30的操作
trans.Commit(); //提交事务
Console.WriteLine("执行成功");
}
catch (Exception ex)
{
trans.Rollback();//发生了异常,回滚事务
Console.WriteLine("执行失败,因为:" + ex.Message);
}
}
--
--11.6.2节示例
--
使用TransactionScope进行事务处理
try
{
using (TransactionScope trans = new TransactionScope())//使用TransactionScope启动事务
{
using (SqlConnection conn = new SqlConnection(sqlconn))//在一个连接中执行了操作
{
conn.Open();//打开连接
string sql = "update t1 set c2=c2+30 where c1=1";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();//执行现金增加30的操作
}
using (SqlConnection conn = new SqlConnection(sqlconn))//在另外一个连接中执行操作
{
conn.Open();//再打开一个连接
string sql2 = "update t2 set c2=c2-30 where c1=1";
SqlCommand cmd2 = new SqlCommand(sql2, conn);
cmd2.ExecuteNonQuery();//执行存款减少的操作
}
trans.Complete();//提交事务
Console.WriteLine("操作成功");
}
}
catch (Exception ex)//捕捉到异常
{
Console.WriteLine(ex.Message);//输出异常消息内容
}