2023年6月21日发(作者:)
Sqlserver事务的两种⽤法 事务(Transaction)是并发控制的单位,是⽤户定义的⼀个操作序列。这些操作要么都做,要么都不做,是⼀个不可分割的⼯作单位。通过事务,SQL Server能将逻辑相关的⼀组操作绑定在⼀起,以便服务器保持数据的完整性。在sql server+ .net 开发环境下,有两种⽅法能够完成事务的操作,保持数据库的数据完整性;⼀个就是⽤sql存储过程,另⼀个就是在中⼀种简单的事务处理;现在通过⼀个典型的银⾏转账的例⼦来说明⼀下这两个例⼦的⽤法我们先来看看sql存储过程是如何来完成事务的操作的:⾸先创建⼀个表:create database aaaa --创建⼀个表,包含⽤户的帐号和钱数gouse aaaacreate table bb( ID int not null primary key, --帐号 moneys money --转账⾦额)insert into bb values ('1','2000') --插⼊两条数据insert into bb values ('2','3000')⽤这个表创建⼀个存储过程:create procedure mon --创建存储过程,定义⼏个变量@toID int, --接收转账的账户@fromID int , --转出⾃⼰的账户@momeys money --转账的⾦额asbegin tran --开始执⾏事务
update bb set moneys=moneys-@momeys where ID=@fromID -执⾏的第⼀个操作,转账出钱,减去转出的⾦额update bb set moneys=moneys+@momeys where ID=@toID --执⾏第⼆个操作,接受转账的⾦额,增加
if @@error<>0 --判断如果两条语句有任何⼀条出现错误begin rollback tran –开始执⾏事务的回滚,恢复的转账开始之前状态return 0endgo
else --如何两条都执⾏成功begin commit tran 执⾏这个事务的操作return 1endgo
接下来看看C#.net 是如何调⽤这个存储过程的: protected void Button1_Click(object sender, EventArgs e) { SqlConnection con =new SqlConnection(@"Data Source=.SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx"); //连接字符串 SqlCommand cmd = new SqlCommand("mon",con); //调⽤存储过程 dType = Procedure; (); SqlParameter prar = new SqlParameter();//传递参数 hValue("@fromID", 1); hValue("@toID", 2); hValue("@momeys",32( ) );
("@return", "").Direction = Value;//获取存储过程的返回值 eNonQuery(); string value = ters["@return"].ng();//把返回值赋值给value if (value == "1") { = "添加成功"; } else { = "添加失败"; }}这个也就是在存储过程⾥添加事务,再来看看不在数据库写sql存储过程,是如何处理事务的:protected void Button2_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx"); (); SqlTransaction tran = ransaction();//先实例SqlTransaction类,使⽤这个事务使⽤的是con 这个连接,使⽤BeginTransaction这个⽅法来开始执⾏这个事务 SqlCommand cmd = new SqlCommand(); tion = con; ction = tran; try { //在try{} 块⾥执⾏sqlcommand命令, dText = "update bb set moneys=moneys-'" + 32() + "' where ID='1'"; eNonQuery(); dText = "update bb set moneys=moneys+' aa ' where ID='2'"; eNonQuery(); ();//如果两个sql命令都执⾏成功,则执⾏commit这个⽅法,执⾏这些操作
= "添加成功"; } catch { = "添加失败"; ck();//如何执⾏不成功,发⽣异常,则执⾏rollback⽅法,回滚到事务操作开始之前; }
}这就是两个事务不同⽤法的简单例⼦, 事务处理的⽅法看起来⽐较简单,但是他要使⽤同⼀个连接来执⾏这些操作,要是同时使⽤⼏个数据库来⽤⼀个事务执⾏,这样就⽐较繁琐,但是要是⽤sql存储过程,这样就相对⽐较简单,总之是两种⽅法各有各的优点。
2023年6月21日发(作者:)
Sqlserver事务的两种⽤法 事务(Transaction)是并发控制的单位,是⽤户定义的⼀个操作序列。这些操作要么都做,要么都不做,是⼀个不可分割的⼯作单位。通过事务,SQL Server能将逻辑相关的⼀组操作绑定在⼀起,以便服务器保持数据的完整性。在sql server+ .net 开发环境下,有两种⽅法能够完成事务的操作,保持数据库的数据完整性;⼀个就是⽤sql存储过程,另⼀个就是在中⼀种简单的事务处理;现在通过⼀个典型的银⾏转账的例⼦来说明⼀下这两个例⼦的⽤法我们先来看看sql存储过程是如何来完成事务的操作的:⾸先创建⼀个表:create database aaaa --创建⼀个表,包含⽤户的帐号和钱数gouse aaaacreate table bb( ID int not null primary key, --帐号 moneys money --转账⾦额)insert into bb values ('1','2000') --插⼊两条数据insert into bb values ('2','3000')⽤这个表创建⼀个存储过程:create procedure mon --创建存储过程,定义⼏个变量@toID int, --接收转账的账户@fromID int , --转出⾃⼰的账户@momeys money --转账的⾦额asbegin tran --开始执⾏事务
update bb set moneys=moneys-@momeys where ID=@fromID -执⾏的第⼀个操作,转账出钱,减去转出的⾦额update bb set moneys=moneys+@momeys where ID=@toID --执⾏第⼆个操作,接受转账的⾦额,增加
if @@error<>0 --判断如果两条语句有任何⼀条出现错误begin rollback tran –开始执⾏事务的回滚,恢复的转账开始之前状态return 0endgo
else --如何两条都执⾏成功begin commit tran 执⾏这个事务的操作return 1endgo
接下来看看C#.net 是如何调⽤这个存储过程的: protected void Button1_Click(object sender, EventArgs e) { SqlConnection con =new SqlConnection(@"Data Source=.SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx"); //连接字符串 SqlCommand cmd = new SqlCommand("mon",con); //调⽤存储过程 dType = Procedure; (); SqlParameter prar = new SqlParameter();//传递参数 hValue("@fromID", 1); hValue("@toID", 2); hValue("@momeys",32( ) );
("@return", "").Direction = Value;//获取存储过程的返回值 eNonQuery(); string value = ters["@return"].ng();//把返回值赋值给value if (value == "1") { = "添加成功"; } else { = "添加失败"; }}这个也就是在存储过程⾥添加事务,再来看看不在数据库写sql存储过程,是如何处理事务的:protected void Button2_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx"); (); SqlTransaction tran = ransaction();//先实例SqlTransaction类,使⽤这个事务使⽤的是con 这个连接,使⽤BeginTransaction这个⽅法来开始执⾏这个事务 SqlCommand cmd = new SqlCommand(); tion = con; ction = tran; try { //在try{} 块⾥执⾏sqlcommand命令, dText = "update bb set moneys=moneys-'" + 32() + "' where ID='1'"; eNonQuery(); dText = "update bb set moneys=moneys+' aa ' where ID='2'"; eNonQuery(); ();//如果两个sql命令都执⾏成功,则执⾏commit这个⽅法,执⾏这些操作
= "添加成功"; } catch { = "添加失败"; ck();//如何执⾏不成功,发⽣异常,则执⾏rollback⽅法,回滚到事务操作开始之前; }
}这就是两个事务不同⽤法的简单例⼦, 事务处理的⽅法看起来⽐较简单,但是他要使⽤同⼀个连接来执⾏这些操作,要是同时使⽤⼏个数据库来⽤⼀个事务执⾏,这样就⽐较繁琐,但是要是⽤sql存储过程,这样就相对⽐较简单,总之是两种⽅法各有各的优点。
发布评论