c#实现数据库事务示例分享

 更新时间:2014年01月17日 11:11:43   作者:  
这篇文章主要介绍了c#执行多条sql更新语句实现数据库事务的示例,大家参考使用吧


复制代码 代码如下:

using System;
using System.Data.SqlClient;

namespace ExecuteSqlTran
{
    class Program
    {
        class Result<T>
        {
            public T data;
            public string Message;
            public bool Success;
            public string StackTrace;
        }

        struct ExecuteableUnit
        {
            public string SQL;
            public SqlParameter[] param;
        }

        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
        private static Result<int> ExecuteSqlTransaction(params ExecuteableUnit[] executeableUnits)
        {
            using (SqlConnection connection = new SqlConnection(""))
            {
                connection.Open();
                SqlCommand command = connection.CreateCommand();
                SqlTransaction transaction = connection.BeginTransaction();
                command.Connection = connection;
                command.Transaction = transaction;
                int result = 0;
                try
                {
                    foreach(ExecuteableUnit exeUnit in executeableUnits)
                    {
                        command.CommandText = exeUnit.SQL;
                        if(exeUnit.param.GetLength(1) > 0)
                        {
                            foreach(SqlParameter p in exeUnit.param)
                                command.Parameters.Add(p);
                        }
                        result += command.ExecuteNonQuery();
                    }
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    // Attempt to roll back the transaction.
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        return new Result<int>()
                        {
                            Success = false, Message = ex2.Message, StackTrace = ex2.StackTrace
                        };
                    }
                    return new Result<int>()
                    {
                        Success = false, Message = ex.Message, StackTrace = ex.StackTrace
                    };
                }
                finally
                {
                    // Attempt to roll back the transaction.
                    try
                    {
                  connection.Close();
                    }
                    catch (Exception ex)
                    {
                    }
                }
                return new Result<int>()
                {
                    Success = true, data = result
                };
            }
        }

        public static void Main(string[] args)
        {
        }
    }
}

相关文章

  • 对指定的网页进行截图的效果 C#版

    对指定的网页进行截图的效果 C#版

    对指定的网页进行截图的效果 C#版...
    2007-08-08
  • C#中使用async和await实现异步Udp通讯的示例代码

    C#中使用async和await实现异步Udp通讯的示例代码

    本文主要介绍了C#中使用async和await实现异步Udp通讯的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C#强制转换和尝试转换的方法

    C#强制转换和尝试转换的方法

    这篇文章主要为大家详细介绍了C#强制转换和尝试转换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 使用C#编写自己的区块链挖矿算法

    使用C#编写自己的区块链挖矿算法

    这篇文章主要介绍了使用C#编写自己的区块链挖矿算法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 深入分析c# 封装和访问修饰符

    深入分析c# 封装和访问修饰符

    这篇文章主要介绍了c# 封装和访问修饰符的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#中多维数组[,]和交错数组[][]的区别

    C#中多维数组[,]和交错数组[][]的区别

    这篇文章介绍了C#中多维数组[,]和交错数组[][]的区别,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • 基于TCP异步Socket模型的介绍

    基于TCP异步Socket模型的介绍

    本篇文章小编将为大家介绍,基于TCP异步Socket模型的介绍,需要的朋友参考下
    2013-04-04
  • C#实现任务栏通知窗口

    C#实现任务栏通知窗口

    作为程序员在享受的同时我们也不禁要问:这到底是怎么实现的呢?本文就利用Visual Studio .Net C# 2005以及.Net框架绘图技术来实现这种任务栏通知窗口。
    2015-10-10
  • C#双向链表LinkedList排序实现方法

    C#双向链表LinkedList排序实现方法

    这篇文章主要介绍了C#双向链表LinkedList排序实现方法,涉及C#双向链表的定义与排序技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#删除Excel中的图片实例代码

    C#删除Excel中的图片实例代码

    在本篇文章里小编给大家分享了关于C#删除Excel中的图片的实例代码内容,有兴趣的朋友们参考学习下。
    2019-07-07

最新评论