• 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();

    }

    }

    爱过知情重,醉过知酒浓
  • 相关阅读:
    回顾python,就当做笔记了
    测试知识回顾
    转发 Python接口自动化
    性能测试脚本调优
    java
    新的一年,希望自己有所提升,在这简单的记录,自己的学习。
    navicat 连接 mysql 出现Client does not support authentication protocol requested by server解决方案
    tomcat context配置
    tomcat host 配置
    flyway使用
  • 原文地址:https://www.cnblogs.com/huanhuan86/p/2441995.html
Copyright © 2020-2023  润新知