ASP.NET 2.0数据教程之六十三:在事务里对数据库修改进行封装
_Click(object sender, EventArgs e) { // Get the set of products ProductsBLL productsAPI = new ProductsBLL(); Northwind.ProductsDataTable products = productsAPI.GetProducts(); // Update each product''s CategoryID foreach (Northwind.ProductsRow product in products) { product.CategoryID = product.ProductID; } // Update the data WITHOUT using a transaction NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new NorthwindTableAdapters.ProductsTableAdapter(); productsAdapter.Update(products); // Refresh the Grid Products.DataBind(); } refresh按钮的Click事件处 理器仅仅调用Products GridView的DataBind方法将数据重新绑定到ridView控 件. 第二个事件处理器对products的CategoryID属性重新赋值,并调用BLL 层里的新的事务方法来执行数据库更新.我们注意到将每个产品的ProductID值赋 给其CategoryID属性,对最开头的几个产品而言没有任何问题,但随着ProductID 值越变越大,CategoryID的值也越变越大,而Category表里定义的种类毕竟有限 ,于是问题就出来了。 第三个事件处理器也是将ProductID值赋给 CategoryID属性,只是用ProductsTableAdapter的默认的Update方法来更新数据 库. 该Update方法并没有使用事务来封装这些命令,所以只要是没有违背外键约 束的更新都会执行成功. 在浏览器里登录该页面进行验证.最开始你将看到 如图8所示的画面,然后点“Modify Categories (WITH TRANSACTION) ”.这将导致页面回传并试题更新所有products的CategoryID值,这将导致 违背外键约束(见图9). 图8:Products将显示在一个分页的GridView控件里 图9:导致违背外键约束 现在点击浏览器的Back按钮,再点击 “Refresh Grid”按钮,此时你看到的界面和图8的界面一摸一样。这 是因为发生了违背外键约束,导致回滚,所有的操作失败. 再点 “Modify Categories (WITHOUT TRANSACTION)”按钮,这同样将违背 外键约束(见图9),不过这一次,那些对CategoryID属性赋以有效值的操作不会回 滚.点击浏览器的Back按钮,再点“Refresh Grid”按钮。就像图10显 示的那样,最开始的8个产品的CategoryID值已经发生了更改,比如,在图8里 Chang的CategoryID值为1,而在图10里就变成了2了. 图10:某些Product的CategoryID值发生了改变,而其它的没有 结语: 默认情况下,TableAdapter的方法没有使用事务来执行数据库命令 ,不过只需多做一点工作我们就可以添加一些用于创建、提交、回滚事务的方法. 在本教程,我们在ProductsTableAdapter class类里创建了这3个方法: BeginTransaction, CommitTransaction,和RollbackTransaction.我们考察了如 何在try...catch模块里使用这些方法来执行一系列的修改命令.具体来说,我们 在ProductsTableAdapter里创建了UpdateWithTransaction方法,该方法运用 Batch Update模式对ProductsDataTable里的每行记录执行必要的更改操作;我们 也对BLL里的ProductsBLL class类添加了DeleteProductsWithTransaction方法, 它将一系列ProductID值作为输入参数,并使用DB-Direct模式将每个产品删除.这 些方法开始都创建一个事务,再在try...catch模块里执行数据更改命令.如果抛 出异常,则回滚事务,否则提交事务. 第五步演示了事务的作用。在接下 来的3章我们将以本章为基础,创建批更新、批删除、批添加的用户界面. 祝编程快乐! 作者简介 Scott Mitchell,著有六本ASP/ASP.NET方 面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用 微软Web技术 。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |