体验SQL语言的事务机制
成都创新互联公司长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为改则企业提供专业的成都网站设计、网站建设,改则网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
作为大型的企业级数据库,C# SQL Server2000对事务提供了很好的支持。我们可以使用SQL语句来定义、提交以及回滚一个事务。
如下所示的SQL代码定义了一个事务,并且命名为"MyTransaction
这里用到了C# SQL Server2000自带的示例数据库pubs,提交事务后,将为所有畅销计算机书籍支付的版税增加 10%。
打开C# SQL Server2000的查询分析器,选择pubs数据库,然后运行这段程序,结果显而易见。
可是如何在C#程序中运行呢?我们记得在普通的SQL查询中,一般需要把查询语句赋值给SalCommand.CommandText属性,这里也就像普通的SQL查询语句一样,将这些语句赋给SqlCommand.CommandText属性即可。要注意的一点是,其中的"GO"语句标志着SQL批处理的结束,编写SQL脚本是需要的,但是在这里是不必要的。我们可以编写如下的程序来验证这个想法:
- //TranSql.csusingSystem;
- usingSystem.Data;
- usingSystem.Data.SqlClient;
- namespaceAspcn
- {
- publicclassDbTranSql
- {
- file://将事务放到SQLServer中执行
- publicvoidDoTran()
- {
- file://建立连接并打开
- SqlConnectionmyConn=GetConn();myConn.Open();
- SqlCommandmyComm=newSqlCommand();
- try
- {
- myComm.Connection=myConn;
- myComm.CommandText="DECLARE@TranNameVARCHAR(20)";
- myComm.CommandText+="SELECT@TranName='MyTransaction'";
- myComm.CommandText+="BEGINTRANSACTION@TranName";
- myComm.CommandText+="USEpubs";
- myComm.CommandText+="UPDATEroyschedSETroyalty=royalty*1.10WHEREtitle_idLIKE'Pc%'";
- myComm.CommandText+="COMMITTRANSACTIONMyTransaction";
- myComm.ExecuteNonQuery();
- }
- catch(Exceptionerr)
- {
- thrownewApplicationException("事务操作出错,系统信息:"+err.Message);
- }
- finally
- {
- myConn.Close();
- }
- }
- file://获取数据连接
- privateSqlConnectionGetConn()
- {
- stringstrSql="DataSource=localhost;IntegratedSecurity=SSPI;userid=sa;password=";
- SqlConnectionmyConn=newSqlConnection(strSql);
- returnmyConn;
- }
- }
- publicclassTest
- {
- publicstaticvoidMain()
- {
- DbTranSqltranTest=newDbTranSql();
- tranTest.DoTran();
- Console.WriteLine("事务处理已经成功完成。");
- Console.ReadLine();
- }
- }
- }
注意到其中的SqlCommand对象myComm,它的CommandText属性仅仅是前面SQL代码字符串连接起来即可,当然,其中的"GO"语句已经全部去掉了。这个语句就像普通的查询一样,程序将SQL文本事实上提交给DBMS去处理了,然后接收返回的结果(如果有结果返回的话)。
很自然,我们最后看到了输出"事务处理已经成功完成",再用企业管理器查看pubs数据库的roysched表,所有title_id字段以"PC"开头的书籍的royalty字段的值都增加了0.1倍。
这里,我们并没有使用ADO.net的事务处理机制,而是简单地将执行事务的SQL语句当作普通的查询来执行,因此,事实上该事务完全没有用到.net的相关特性。
了解.net中的事务机制
如你所知,在.net框架中主要有两个命名空间(namespace)用于应用程序同数据库系统的交互:System.Data.SqlClient和System.Data.OleDb。前者专门用于连接Microsoft公司自己的SQL Server数据库,而后者可以适应多种不同的数据库。这两个命名空间中都包含有专门用于管理数据库事务的类,分别是System.Data.SqlClient.SqlTranscation类和System.Data.OleDb.OleDbTranscation类。
就像它们的名字一样,这两个类大部分功能是一样的,二者之间的主要差别在于它们的连接机制,前者提供一组直接调用C# SQL Server 的对象,而后者使用本机 OLE DB 启用数据访问。 事实上,ADO.net 事务完全在数据库的内部处理,且不受 Microsoft 分布式事务处理协调器 (DTC) 或任何其他事务性机制的支持。本文将主要介绍System.Data.SqlClient.SqlTranscation类,下面的段落中,除了特别注明,都将使用System.Data.SqlClient.SqlTranscation类。
分享名称:简单介绍C#SQLServer
网站路径:http://www.mswzjz.cn/qtweb/news22/244822.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能