–事务就是被绑定在一起作为一个逻辑工作单元的SQL语句组, 显式事务: 隐式事务: 批处理级事务: 原子性、一致性、持久性通过数据库日志实现。 执行较慢。 可参考此博客:(https://www.cnblogs.com/pressforward/p/7601314.html)
什么是事务
–如果任何一个语句操作失败那么整个操作就被失败,进而回滚到操作前状态,或者是上个节点。
–为了确保要么执行,要么不执行,就可以使用事务。
–要将一组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。事务的分类
每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。
在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。
只能应用于多个活动结果集 (MARS),在 MARS 会话中启动的 Transact-SQL 显式或隐式事务变为批处理级事务。当批处理完成时没有提交或回滚的批处理级事务自动由 SQL Server 进行回滚。事务的使用
开始事务
begin transaction "事务名"
回滚事务
rollback transaction "事务名"
提交事务
commit transaction "事务名"
使用存储过程执行事务
## 示例 模拟银行转账功能
go create proc cp_changeAcount ( @idOut int, 打款人ID @idIn int, 收款人ID @Remain decimal(18,2) 转账金额 ) as --定义变量记录错误数量 declare @error_nums int set @error_nums=0 --开始事务 begin transaction tran_change begin try update [dbo].[Customers] set remaini=(remaini-@Remain) where id=@idOut set @error_nums=@error_nums+@@error update [dbo].[Customers] set remaini=(remaini+@Remain) where id=@idIn set @error_nums=@error_nums+@@error end try begin catch set @error_nums=@error_nums+1 print '错误异常:'+convert(varchar(50),error_number()) +'错误消息:'+error_message() end catch if(@error_nums>0)--表示有错,回滚 rollback transaction tran_change else commit transaction tran_change go 执行存储过程 exec cp_changeAcount 4,5,2 切记:创建存储过程时不要同时执行存储过程,否则会报 超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。错误
EF使用存储过程执行存储过程
后台显示的控制器
实例数据库对象 EnRoleEntities db = new EnRoleEntities(); public ActionResult Index() { var customer = db.Customers1.ToList(); return View(customer); }
前台展示
@{ ViewBag.Title = "Index"; } <form action="/Customer/Change_Remain"> <div> <label>转出者</label> <select name="idOut"> @foreach (var item in Model) { <option value="@item.ID" >@item.Name </option> } </select> </div> <div> <label>转入者</label> <select name="idIn"> @foreach (var item in Model) { <option value="@item.ID">@item.Name </option> } </select> </div> <div> <label>金额</label> <input type="text" name="Remain" /> </div> <input type="submit" value="提交" /> </form> <table class="table table-bordered" > <thead> <tr> <th>编号</th> <th>姓名</th> <th>余额</th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td>@item.ID</td> <td>@item.Name</td> <td>@item.remaini</td> </tr> } </tbody> </table>
提交的控制器
public ActionResult Change_Remain(int idOut,int idIn, decimal Remain) { try { db.cp_changeAcount(idOut, idIn, Remain); } catch (Exception) { return Content("错误"); } //db.SaveChanges(); return RedirectToAction("Index"); }
事务的优缺点
事务优点
批处理数据库操作。
保证数据库级联操作的正确性。事务缺点
需要较多的磁盘空间保存事务日志。
执行更新需要内存较多。EF6中的事务
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算