事物的问题

xingfu179510 2012-03-08 11:15:10
怎样使用事物 执行4个sql 而且着4个sql是处理4个不同的表 我是用三层架构做的
...全文
108 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingfu179510 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kkxxllasasas 的回复:]

引用 13 楼 xingfu179510 的回复:

引用 11 楼 yanbuodiao 的回复:

C# code

#region 事务执行
/// <summary>
/// 执行事务
/// </summary>张辉 2011.09.21
/// <param name="cmdList">需要按事务执行的Sql语句集合</param>
/// <returns>……
[/Quote]
品接到一起 然后在分割那不是就回到原点了吗?
xingfu179510 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 xingfu179510 的回复:]
怎样使用事物 执行4个sql 而且着4个sql是处理4个不同的表 我是用三层架构做的
[/Quote]
谢谢你 但是我这个执行的sql是在不同的表中进行的,不是同一个表
beautiful_melody 2012-03-08
  • 打赏
  • 举报
回复
事物是啥啊 你是说事件吗?
yyl8781697 2012-03-08
  • 打赏
  • 举报
回复
http://www.cnblogs.com/yyl8781697/archive/2012/02/01/SqlTransaction.html
小弟写的,希望对LZ有帮助
快乐大法师 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xingfu179510 的回复:]

引用 11 楼 yanbuodiao 的回复:

C# code

#region 事务执行
/// <summary>
/// 执行事务
/// </summary>张辉 2011.09.21
/// <param name="cmdList">需要按事务执行的Sql语句集合</param>
/// <returns>返回true:执行成功;返回false:执行……

这……
[/Quote]

4个语句拼接到一起 用;分割 在dal重新写个方法
xingfu179510 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yanbuodiao 的回复:]

C# code

#region 事务执行
/// <summary>
/// 执行事务
/// </summary>张辉 2011.09.21
/// <param name="cmdList">需要按事务执行的Sql语句集合</param>
/// <returns>返回true:执行成功;返回false:执行……
[/Quote]
这些方法我都会写 就是在传4个sql的时候,那四个sql是在4个不同的dal里面,就是不知道怎样把4个sql传到cmdList里面
烟波钓 2012-03-08
  • 打赏
  • 举报
回复
/// <summary>
/// 封装带参数的Sql语句
/// </summary>张辉 2011.9.28 添加
public class SqlStrWithParameter
{
/// <summary>
/// 重定义的构造函数,用于初始化自己的操作字串和参数列表
/// </summary>
/// <param name="sqlStr">操作字串</param>
/// <param name="parameter">参数列表数组</param>
public SqlStrWithParameter(string sqlStr, SqlParameter[] parameter)
{
sqlstr = sqlStr;
parameters = parameter;
}
string sqlstr;
SqlParameter[] parameters;
/// <summary>
/// Sql命令语句
/// </summary>
public string SqlStr
{
get
{
return sqlstr;
}
set
{
sqlstr = value;
}
}
/// <summary>
/// 该Sql命令语句所带的参数
/// </summary>
public SqlParameter[] Parameters
{
get
{
return parameters;
}
set
{
parameters = value;
}
}
}
烟波钓 2012-03-08
  • 打赏
  • 举报
回复

#region 事务执行
/// <summary>
/// 执行事务
/// </summary>张辉 2011.09.21
/// <param name="cmdList">需要按事务执行的Sql语句集合</param>
/// <returns>返回true:执行成功;返回false:执行失败</returns>
public static bool ExecuteTran(List<string> cmdList)
{
bool mark = false;
using (SqlConnection con = new SqlConnection(connString))
{
if (con.State != ConnectionState.Open)
con.Open();
SqlTransaction tran = con.BeginTransaction();
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.Transaction = tran;
foreach (string item in cmdList)
{
cmd.CommandText = item;
cmd.ExecuteNonQuery();
}
mark = true;
tran.Commit();
}
catch (Exception ex)
{
PubFunction.ErrorLogPrint("事务执行", ex.Message);
tran.Rollback();
}
return mark;
}
}
/// <summary>
/// 执行事务,可自定义连接字符串
/// </summary>张辉 2011.09.21
/// <param name="cmdList">需要按事务执行的Sql语句集合</param>
/// <param name="conStr">自定义的连接字符串</param>
/// <returns>返回true:执行成功;返回false:执行失败</returns>
public static bool ExecuteTran(List<string> cmdList, string conStr)
{
using (SqlConnection myCon = new SqlConnection(conStr))
{
bool mark = false;
if (myCon.State != ConnectionState.Open)
myCon.Open();
SqlTransaction tran = myCon.BeginTransaction();
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = myCon;
cmd.Transaction = tran;
foreach (string item in cmdList)
{
cmd.CommandText = item;
cmd.ExecuteNonQuery();
}
mark = true;
tran.Commit();
}
catch (Exception ex)
{
PubFunction.ErrorLogPrint("事务执行", ex.Message);
tran.Rollback();
}
return mark;
}
}
/// <summary>
/// 带参数的存储过程执行
/// </summary>张辉 2011.09.28 添加
/// <param name="cmdList">执行命令和参数列表集合列表</param>
/// <returns>true:执行成功 false:执行失败</returns>
public static bool ExecuteTran(List<SqlStrWithParameter> cmdList)
{
bool mark = false;
using (SqlConnection con = new SqlConnection(connString))
{
if (con.State != ConnectionState.Open)
con.Open();
SqlTransaction tran = con.BeginTransaction();
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.Transaction = tran;
foreach (SqlStrWithParameter item in cmdList)
{
cmd.Dispose();
cmd.CommandText = item.SqlStr;
if (item.Parameters != null && item.Parameters.Length > 0)
{
foreach (SqlParameter p in item.Parameters)
{
cmd.Parameters.Add(p);
}
}
cmd.ExecuteNonQuery();
}
mark = true;
tran.Commit();
}
catch (Exception ex)
{
PubFunction.ErrorLogPrint("事务执行", ex.Message);
tran.Rollback();
}
return mark;
}
}
#endregion
xingfu179510 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 msdnxgh 的回复:]

事务最好使用储存过程,写在储存过程内面,你可以看一看SQL相关的书
[/Quote]

但是这个项目用access数据库 不能写存储过程呀 您能给个例子吗
MSDNXGH 2012-03-08
  • 打赏
  • 举报
回复
事务最好使用储存过程,写在储存过程内面,你可以看一看SQL相关的书
xingfu179510 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yanbuodiao 的回复:]

引用楼主 xingfu179510 的回复:
怎样使用事物 执行4个sql 而且着4个sql是处理4个不同的表 我是用三层架构做的

四个和两个是一样的 你就把它看做是两个的

这中间并没有质变 所以思路是一致的 内容么 就是多写两行代码

当然,最好把这个事务执行封装成一个方法(该方法的参数接受要事物执行的SQL语句) 不管同时有多少SQL(当然是一定限度内的)都调用……
[/Quote]

你能给我一个例子吗?
烟波钓 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 xingfu179510 的回复:]
怎样使用事物 执行4个sql 而且着4个sql是处理4个不同的表 我是用三层架构做的
[/Quote]
四个和两个是一样的 你就把它看做是两个的

这中间并没有质变 所以思路是一致的 内容么 就是多写两行代码

当然,最好把这个事务执行封装成一个方法(该方法的参数接受要事物执行的SQL语句) 不管同时有多少SQL(当然是一定限度内的)都调用这个方法
xingfu179510 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 id270 的回复:]

一个sql不成功就回滚?
还是4个其中某一个不成功就回滚?
[/Quote]

4个其中一个不成功就回滚
快乐的小二兔 2012-03-08
  • 打赏
  • 举报
回复
一个sql不成功就回滚?
还是4个其中某一个不成功就回滚?

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧