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 回车,搞定!

     

     


    合乎自然而生生不息。。。
  • 相关阅读:
    数据库设计准则(第一、第二、第三范式说明)
    Linux之chmod使用
    数据备份——PHP
    PHP语言性能优化——少使用魔术方法
    PHP性能之语言性能优化:安装VLD扩展——检测性能
    PHP性能之语言性能优化:安装VLD扩展——检测性能
    PHP性能之语言性能优化:安装VLD扩展——检测性能
    socket、fsockopen、curl、stream 区别
    iOS 下 Podfile 使用方法
    使用 NVM 管理不同的 Node.js 版本
  • 原文地址:https://www.cnblogs.com/samwu/p/2159380.html
Copyright © 2011-2022 走看看