博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ADO.NET两种事务处理方法
阅读量:5837 次
发布时间:2019-06-18

本文共 2763 字,大约阅读时间需要 9 分钟。

第一种是SqlTransaction类事务处理,基于.NET代码上的事务处理。详细信息访问:http://www.cnblogs.com/windows/articles/1605636.htm

优点不用说,缺点是:

– 事务不能跨越多个数据库连接
– 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。
using
 System;
using
 System.Collections.Generic;
using
 System.Linq;
using
 System.Web;
using
 System.Web.UI;
using
 System.Web.UI.WebControls;
using
 System.Data;
using
 System.Data.SqlClient;
using
 System.Transactions;
namespace
 dotNET数据访问
{
    
public
 
partial
 
class
 事务处理 : System.Web.UI.Page
    {
        
string
 conn 
=
 
"
Data Source=.;Initial Catalog=test;Integrated Security=True
"
;
        SqlConnection con;
        
protected
 
void
 Page_Load(
object
 sender, EventArgs e)
        {
        }
        
protected
 
void
 Button1_Click(
object
 sender, EventArgs e)
        {
            
            con 
=
 
new
 SqlConnection(conn);
            con.Open();
            
//
启动一个事务。
            SqlTransaction myTran 
=
 con.BeginTransaction();
            SqlCommand myCom 
=
 
new
 SqlCommand();
            myCom.Connection 
=
 con;
            myCom.Transaction 
=
 myTran;
            
try
            {
                myCom.CommandText 
=
 
"
insert into fenye(value) values('zz')
"
;
//
这条没有插入数据库
                myCom.ExecuteNonQuery();
                myCom.CommandText 
=
 
"
insert into fenye2(value) values('zz2')
"
;
                myCom.ExecuteNonQuery();
                myTran.Commit();
                Response.Write(
"
成功执行!1
"
);
            }
            
catch
 (Exception Ex)
            {
                myTran.Rollback();
                
//
创建并且返回异常的错误信息
                Response.Write(Ex.ToString());
                Response.Write(
"
写入数据库失败
"
);
            }
            
finally
            {
                con.Close();
            }
        }
        
protected
 
void
 Button2_Click(
object
 sender, EventArgs e)
        {
            
using
 (TransactionScope tsCope 
=
 
new
 TransactionScope())
            {
                
using
 (con 
=
 
new
 SqlConnection(conn))
                {
                    SqlCommand cmd 
=
 
new
 SqlCommand(
"
insert into fenye(value) values('zz')
"
, con);
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
                
using
 (con 
=
 
new
 SqlConnection(conn))
                {
                    SqlCommand cmd 
=
 
new
 SqlCommand(
"
insert into fenye2(value) values('zz2')
"
, con);
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
                Response.Write(
"
执行成功!2
"
);
                tsCope.Complete();
            }
        }
    }
}

第二种事务使用TransactionScope类,用来弥补第一种事务的缺点。详细信息访问:http://www.cnblogs.com/zhangpengshou/archive/2009/07/20/1527269.html

注意使用第二种事务前,先引用System.Transactions.dll,然后命名空间引用。还要确保电脑上开启了DTC服务。开启方法访问:

http://it87.net/blog/post/2010/06/04/e69c8de58aa1e599a8c397c397c397e4b88ae79a84MSDTCe4b88de58fafe794a8e8a7a3e586b3e58a9ee6b395.aspx
内容如下:

MSDTC(分 布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器 .
位置:控制面板--管理工具--服务--Distributed Transaction Coordinator
依存关系:Remote Procedure Call(RPC)和Security Accounts Manager 
建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。
解决办法: 1. 在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->属性-->启动
        2.在CMD下运行"net start msdtc"开启服务后正常

如果在第1步Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建 MSDTC 日志,并重新启动服务的步骤如下:

(1) 单击"开始",单击"运行",输入 cmd 后按"确定"。
(2) 输入:msdtc -resetlog (注意运行此命令时,不要执行挂起的事务)
(3) 最后输入:net start msdtc 回车,搞定!

 

 

 

转载于:https://www.cnblogs.com/samwu/archive/2011/08/30/2159380.html

你可能感兴趣的文章
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>
Nginx 使用 openssl 的自签名证书
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>
jquery 选择器总结
查看>>