zoukankan      html  css  js  c++  java
  • SQl 事物处理

    /// <summary>

    /// SQL Server事务样本类,演示Sql的事务操作

    /// 作者:李斌(Camus)

    /// </summary>

    public class SQLServerTransactionDemo

    {

    private SQLServerTransactionDemo(){}

    /// <summary>

    /// 获取SQL Server事务样本类的实例方法

    /// </summary>

    /// <returns>SQL Server事务样本类的实例</returns>

    public static SQLServerTransactionDemo GetHandle()

    {

           return new SQLServerTransactionDemo();

    }

    #region 运行SQL Server事务Run方法

    /// <summary>

    /// 运行SQL Server事务

    /// </summary>

    public void Run()

    {

    // 访问Microsoft SQL Server样本数据库Northwind,假设Microsoft SQL Server的sa密码为空

    string connectionString=@"Server=(Local);Database=Northwind;UID=sa;PWD=;Persist Security Info=false;";

    //创建Connection对象

    System.Data.SqlClient.SqlConnection sqlConnection = null;

    System.Data.SqlClient.SqlTransaction sqlTransaction = null;

    try

    {

    sqlConnection = new System.Data.SqlClient.SqlConnection(connectionString);

    sqlConnection.Open();//打开Connection

    // 开始本地事务,Connection.BeginTransaction()

    // IsolationLevel.ReadCommitted:

    // 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。

    sqlTransaction = sqlConnection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted,"SQLTransaction");

    //创建Command对象

    System.Data.SqlClient.SqlCommand sqlCommand = sqlConnection.CreateCommand();

    // 指派Connection和Transaction对象给Command对象

    sqlCommand.Connection = sqlConnection;

    sqlCommand.Transaction = sqlTransaction;

    //开始执行事务,该事务由命令1 2 3组成.

    // 执行数据库命令1

    sqlCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (200, \'Description\')";

    sqlCommand.ExecuteNonQuery();

    // 执行数据库命令2

    sqlCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (201, \'Description\')";

    sqlCommand.ExecuteNonQuery();

    // 执行数据库命令3!!!与命令1相同,会出错

    sqlCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (200, \'Description\')";

    sqlCommand.ExecuteNonQuery();

    // 提交事务

    sqlTransaction.Commit();

    Console.WriteLine("两条数据库命令已经执行完成.");

    }

    catch(Exception e)

    {

    try

    {

    if(sqlTransaction != null)

    {

    // 回滚事务

    sqlTransaction.Rollback("SQLTransaction");

    }

    }

    catch (System.Data.SqlClient.SqlException ex)

    {

    // 回滚事务失败

    if (sqlTransaction.Connection != null)

    {

    Console.WriteLine("执行回滚事务时出现 " + ex.GetType() + " 违例!" + ex.Message);

    }

    }

      

    Console.WriteLine("在执行数据库命令时出现 " + e.GetType() + " 违例!" + e.Message);

    Console.WriteLine("两条数据库命令均未完成.");

    }

    finally

    {

    //关闭Connection

    if(sqlConnection != null)

    {

    sqlConnection.Close();

    }

    }

    }

    #endregion

    public static void Main(string[] args)

    {

    SQLServerTransactionDemo.GetHandle().Run();

    }

    }

    爱过知情重,醉过知酒浓
  • 相关阅读:
    gaia 开源多语言的pipeline 平台
    vernemq 集群 docker-compose 搭建简单试用
    nginx http2 push 试用
    几个方便进行micro frontend 开发的工具&&类库
    Compoxure example 应用说明
    Compoxure 微服务组合proxy 中间件
    SCS Characteristics
    How_Require_Extensions_Work
    nodejs-hook 开发
    microcks 微服务mocks 工具&&运行时
  • 原文地址:https://www.cnblogs.com/huanhuan86/p/2441995.html
Copyright © 2011-2022 走看看