ITPub博客

首页 > 应用开发 > > 【求助】C#怎样控制SQL执行和移动文件在同一个事务执行

【求助】C#怎样控制SQL执行和移动文件在同一个事务执行

作者:piny 时间:2019-08-21 11:51:51 0 删除 编辑
public bool ExecuteSqlsWithTransaction(string[] cmdTexts, Func<bool>[] funcs)
{
if (cmdTexts.Length == 0)
{
return false;
}

using (MySqlConnection connection = new MySqlConnection(connStr))
{
connection.Open();
MySqlTransaction trans = connection.BeginTransaction();
foreach (var sql in cmdTexts)
{
using (MySqlCommand cmd = new MySqlCommand(sql, connection, trans))
{
try
{
LoggerManager.Info(string.Format("执行SQL:{0}", sql));
int rows = cmd.ExecuteNonQuery();
if (rows != 1)
{
trans.Rollback();
LoggerManager.Error("批量执行sql语句失败,事务回滚", null);

return false;
}
LoggerManager.Info(string.Format("影响行数为:{0}", rows));
}
catch (Exception ex)
{
trans.Rollback();
LoggerManager.Error("批量执行sql语句失败,事务回滚", ex);
throw;
}
}
}

if (funcs != null)
{
foreach (Func<bool> func in funcs)
{
//执行方法失败,回滚事务
if (!func())
{
trans.Rollback();

LoggerManager.Error(string.Format("批量执行{0}操作失败,事务回滚", func.Method.Name), null);
return false;
}
}
}

trans.Commit();
LoggerManager.Info("批量执行sql语句成功,事务提交");
return true;
}
}

上面我写的这个方法只能执行没有参数的方法,如果有参数呢?我知道可以 Func<int,bool>[] funcs    可是如果参数数量和类型都不确定呢?我想写个通用的这种方法

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3034/viewspace-3140176/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-05-13

  • 博文量
    137
  • 访问量
    8806