• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装

在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装

作者:heker2007 字体:[增加 减小] 来源:互联网 时间:2017-05-11

heker2007通过本文主要向大家介绍了数据库连接 asp.net,数据库asp.net,asp.net,asp net培训,asp和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

导言:

  正如我们在第16章《概述插入、更新和删除数据》里探讨的那样,GridView控件内建的功能支持对每行数据的编辑和删除功能,你只需要稍稍动一下鼠标就可以创建丰富的数据修改界面而不用写一行代码.但是,在某些情况下,这还不够,我们需要让用户能够成批地处理数据.

  比如,很多基于web(web-based)的电子邮件客户端,将所有邮件出来,每条邮件除了包含邮件信息(主题、发送者等)外,还包含一个checkbox控件。这些界面允许用户同时删除多个邮件,用户只需要选中邮件,再点"删除所选邮件"按钮.当用户要编辑多条不同的记录的时候,提供一个批编辑界面是比较理想的.我们用不着让用户每次都选中一条要编辑的记录,再做相关的修改,最后点“更新”按钮,在批编辑界面里每条记录都有各自的编辑选项,用户可以快速地编辑多条记录再点“Update All”按钮来保存对他们所做的修改.本系列我们将考察如何创建对数据进行添加、编辑、删除批处理的界面.

  如果想对批处理执行atomic operation(原子操作), 那么首先,所做的操作要么都执行成功要么都失败,另外还要对数据访问层进行扩充以支持database transactions(数据库事务)。数据库事务确保INSERT, UPDATE, 和 DELETE语句执行的atomicity(原子数)置于数据库事务的保护之下.另外,绝大多数的当代数据库系统都支持数据库事务.

  在本系列我们先看如何扩充数据访问层以支持数据库事务,接下来我们看如何创建页面以包含添加、更新、删除数据的批处理界面,让我们开始吧.

  注意:在批处理事务里修改数据时,原子数(atomicity)并非总数必要的。在批处理的某些情况下,某些修改成功某些修改失败是可以接受的。比如删除电子邮件时,有些邮件在删除过程中发生了数据库错误,有些邮件没有发生错误,对这种没有发生错误的邮件,批处理照样将其删除掉.对这种情况,我们没有必要设置数据访问层DAL支持数据库事务.不过在其它某些情况下,原子数是至关重要的.比如某个客户想把资金从一个银行帐户转移到另一个银行帐号,下面2个操作必须执行成功:首先,将第一个帐号的资金扣除,然后将资金转入第二个帐号.如果第一步执行成功,第二步执行失败,银行当然高兴,客户怕是要发疯了.在后面的文章里我们将创建添加、更新、删除的批处理界面,就算你不打算在这些页面里使用数据库事务,我也希望你照着本篇文章,对数据访问层进行扩展一支持数据库事务.

事务概述

绝大多数的数据库都支持事务,它可以将多个数据库命令当成一个逻辑单位进行处理.这些包含事务的命令要么都执行成功要么都执行失败.

一般来说,事务通过SQL命令来执行,使用如下的模式:

1.声明事务开始
2.执行构成事务的那些SQL命令
3.如果在第二步中的任何一个命令出错,执行事务回滚(rollback the transaction)
4.如果在第二步中的所有命令成功执行,提交事务

  这些SQL命令可以通过手写的方式输入,比如写SQL脚本、创建存储过程、也可以通过编程的方式来构建,比如使用ADO.NET技术或调用System.Transactions namespace命名空间的类.在本文,我们仅仅考察用ADO.NET技术管理事务.在后面的教程我们看如何在数据访问层Data Access Layer里使用存储过程,到那时,我们再来考察这些创建、回滚、提交事物的SQL命令。另外,要获得更多信息请参考文章《Managing Transactions in SQL Server Stored Procedures》(http://www.4guysfromrolla.com/webtech/080305-1.shtml)

  注意:System.Transactions namespace命名空间的TransactionScope class类允许开发者通过编程的方式获取事务里的一系列命令,且允许事务包含多个数据源,甚至类型不同,比如:Microsoft SQL Server database, 或Oracle database,甚至Web service.本教程我们使用ADO.NET技术而非TransactionScope class类,是因为ADO.NET指定数据库事务更详细,且在很多情况下占用资源更少.此外,在某些情况下,TransactionScope class类要用到Microsoft Distributed Transaction Coordinator (MSDTC),围绕MSDTC的配置、执行和性能问题是比较专业、高级的问题稍微超出了本教程的范围.

  在ADO.NET里,通过调用SqlConnection class类的BeginTransaction method方法启动事务, 该方法返回一个SqlTransaction object对象.将构成事务的数据操作命令放在try...catch区域,如果在try区域的某个命令出错的话,程序将转到catch区域,在此,通过SqlTransaction object对象的Rollback method方法执行事务回滚。如果所有的命令执行成功,将调用位于try区域底部的SqlTransaction object对象的Commit method方法来提交事务.下面的代码片段揭示了该模式。要想看在ADO.NET里使用事务的更多例子,请参阅文章《Maintaining Database Consistency with Transactions》(http://aspnet.4guysfromrolla.com/articles/072705-1.aspx).

// Create the SqlTransaction object
SqlTransaction myTransaction = SqlConnectionObject.BeginTransaction();

try
{
 /*
 * ... Perform the database transaction's data modification statements...
 */

 // If we reach here, no errors, so commit the transaction
 myTransaction.Commit();
}
catch
{
 // If we reach here, there was an error, so rollback the transaction
 myTransaction.Rollback();

 throw;
}

</div>

  默认情况下,强类型数据集(Typed DataSet)里的TableAdapters并不使用事务。为此,我们要对TableAdapter classes类进行扩展,以包含额外的方法以使用上述模式来执行事务。在第二步,我们看如何使用一个partial classes类来添加这些方法.

第一步:创建批处理数据的页面

  在我们考察如何扩展数据访问层DAL以支持数据库事务之前,让我们花点时间来创建一些ASP.NET web页面,我们在本章及后面三章将用到它们.

添加一个名为BatchData的新文件夹,再添加如下的 ASP.NET页面, 务必套用Site.master模板页.

Default.aspx
Transactions.aspx
BatchUpdate.aspx
BatchDelete.aspx
BatchInsert.aspx

http://files.weikejianghu.com/file_images/article/201605/2016051809491921.gif
图1:添加相关的页面

就像其它文件夹里的Default.aspx页面一样,用SectionLevelTutorialListing.ascx用户控件来列出本部分的章节。将其从解决资源管理器里拖到Default.aspx页面.

http://files.weikejianghu.com/file_images/article/201605/2016051809491922.gif
图2:将SectionLevelTutorialListing.ascx用户控件添加到Default.aspx页面

最后添加如下代码到Web.sitemap文件,具体的,将其添加到“Customizing the Site Map” <siteMapNode>后面:

<siteMapNode title="Working with Batched Data"
 url="~/BatchData/Default.aspx"
 description="Learn how to perform batch operations as opposed to
  per-row operations.">
 
 <siteMapNode title="Adding Support for Transactions"
 url="~/BatchData/Transactions.aspx"
 description="See how to extend the Data Access Layer to support
  database transactions." />
 <siteMapNode title="Batch Updating"
 url="~/BatchData/BatchUpdate.aspx"
 description="Build a batch updating interface, where each row in a
  GridView is editable." />
 <siteMapNode title="Batch Deleting"
 url="~/BatchData/BatchDelete.aspx"
 description="Explore how to create an interface for batch deleting
  by adding a CheckBox to each GridView row." />
 <siteMapNode title="Batch Inserting"
 url="~/BatchData/BatchInsert.aspx"
 description="Examine the steps needed to create a batch inserting
  interface, where multiple records can be created at the
  click of a button." />
</siteMapNode>
</div>

完成后,花几分钟在浏览器里登录页面,左面的菜单列出了本部分的各项

http://files.weikejianghu.com/file_images/article/201605/2016051809492023.gif
图3:Site Map现在包含了本章节

第二步:更新数据访问层以支持数据库事务

  就像我们在第一章《创建一个数据访问层》探讨的一样,位于数据访问层的强类型数据集(Typed DataSet)由DataTables 和 TableAdapters构成.  DataTables保存数据,而TableAdapters提供相应的方法从数据库读取数据,并根据DataTables的改动对数据

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET数据库操作类实例
  • ASP.NET保存PDF、Word和Excel文件到数据库
  • ASP.NET数据库存取图片的方法
  • ASP.NET中各种连接数据库的配置的方法及json数据转换
  • ASP.net与SQLite数据库通过js和ashx交互(连接和操作)
  • asp.net 获取数据库连接字符串
  • 在ASP.NET 2.0中操作数据之七十:配置数据库连接和命令等级设置
  • 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装
  • asp.net实现Gradview绑定数据库数据并导出Excel的方法
  • ASP.NET连接数据库并获取数据方法总结

相关文章

  • 2017-05-11Windows虚拟主机与VPS如何实现301重定向(asp.net)
  • 2017-05-11GridView导出Excel实现原理与代码
  • 2017-05-11介绍几个ASP.NET中容易忽略但却很重要的方法函数
  • 2017-05-11ASP.NET在线文本编辑控件的使用(第6节)
  • 2017-05-11一个简答的Access下的分页asp.net代码
  • 2017-05-11ASP.NET 计划任务实现方法(不使用外接程序,.net内部机制实现)
  • 2017-05-11C#各种集合操作的性能总结
  • 2017-05-11.NET常用Request获取信息总结
  • 2017-05-11浅析JSON序列化与反序列化
  • 2017-05-11.net下调用sqlserver存储过程的小例子

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#设置本地网络如DNS、网关、子网掩码、IP等等
    • ASP.NET网站聊天室的设计与实现(第3节)
    • ASP.NET MVC5实现文件上传与地址变化处理(5)
    • 此页的状态信息无效,可能已损坏 的处理办法及原因分析
    • ASP.NET中 script runat server 的用法
    • HttpRequest的QueryString属性 的一点认识
    • 用DataReader还是DataSet?
    • 给自定义Web控件添加事件(前后台代码)
    • asp.net中简体转繁体实现代码
    • DataTable类Clone方法与Copy方法的区别分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有