c#实现数据库事务示例分享
c#实现数据库事务示例分享
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:usingSystem;usingSystem.Data.SqlClient;namespaceExecuteSqlTra...

复制代码 代码如下:

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#教程学习
编程开发子分类