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

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: The Art, Science, and Engineering of Fuzzing: A Survey
    Proj THUDBFuzz Paper Reading: A systematic review of fuzzing based on machine learning techniques
    9.3 付费代理的使用
    11.1 Charles 的使用
    第十一章 APP 的爬取
    10.2 Cookies 池的搭建
    10.1 模拟登录并爬取 GitHub
    11.5 Appium 爬取微信朋友圈
    11.4 Appium 的基本使用
    11.3 mitmdump 爬取 “得到” App 电子书信息
  • 原文地址:https://www.cnblogs.com/kevin1988/p/3526629.html
Copyright © 2011-2022 走看看