zoukankan      html  css  js  c++  java
  • ADO.NET两种事务处理方法

    第一种是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 回车,搞定!

     

     


    合乎自然而生生不息。。。
  • 相关阅读:
    最大子数组问题(分治策略实现)
    Solving the Detached Many-to-Many Problem with the Entity Framework
    Working With Entity Framework Detached Objects
    Attaching detached POCO to EF DbContext
    如何获取qq空间最近访问人列表
    Health Monitoring in ASP.NET 2.0
    problem with displaying the markers on Google maps
    WebMatrix Database.Open… Close() and Dispose()
    Accessing and Updating Data in ASP.NET: Retrieving XML Data with XmlDataSource Control
    Create web setup project that has crystal reports and sql script run manually on client system
  • 原文地址:https://www.cnblogs.com/samwu/p/2159380.html
Copyright © 2011-2022 走看看