///<summary>
///.net万能事务
///</summary>
///<param name="cmdtext1">第一个存储过程或者sql语句;</param>
///<param name="cmdtext2">第二个存储过程或者sql语句;</param>
///<param name="para1">第一个存储过程或者sql的参数</param>
///<param name="para2">第二个存储过程或者sql的参数</param>
///<param name="ct1">第一个参数的类型(存储过程或者sql)</param>
///<param name="ct2">第二个参数的类型(存储过程或者sql)</param>
public static int procAffairs(string cmdtext1, string cmdtext2, SqlParameter[] para1, SqlParameter[] para2, CommandType ct1,CommandType ct2)
{
using (SqlConnection conn = GetConnection())
{
SqlTransaction tran;
//SqlCommand cmd;
SqlCommand cmd = new SqlCommand();
try
{
conn.Open();
tran = conn.BeginTransaction();
cmd.Transaction = tran;
cmd.Connection = conn;
//cmd = new SqlCommand(cmdtext1, conn);
cmd.CommandText = cmdtext1;
cmd.CommandType = ct1;
cmd.Parameters.AddRange(para1);
cmd.ExecuteNonQuery();
//cmd = new SqlCommand(cmdtext2, conn);
cmd.CommandText = cmdtext2;
cmd.CommandType = ct2;
cmd.Parameters.AddRange(para2);
cmd.ExecuteNonQuery();
cmd = new SqlCommand();
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
return 0;
}
}
return 1;
}
public static int procAffairs(string cmdtext1, string cmdtext2, SqlParameter[] para1, SqlParameter[] para2, CommandType ct1,CommandType ct2)
{
using (SqlConnection conn = GetConnection())
{
SqlTransaction tran;
SqlCommand cmd = new SqlCommand();
try
{
conn.Open();
tran = conn.BeginTransaction();
cmd.Transaction = tran;
cmd.Connection = conn;
cmd.CommandText = cmdtext1;
cmd.CommandType = ct1;
cmd.Parameters.AddRange(para1);
cmd.ExecuteNonQuery();
cmd.params.clear();
cmd.CommandText = cmdtext2;
cmd.CommandType = ct2;
cmd.Parameters.AddRange(para2);
cmd.ExecuteNonQuery();
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
return 0;
}
}
return 1;
}
应该这样
事务倒没有什么问题,倒是你的conn在出异常和结束都没有关闭吧。(唯一可能有问题的是同一个cmd 一个事务 却分两次执行两个不同的CommandText ,这个测试一下没问题就应该没问题了)
恩 谢谢提醒
有问题,如果
conn.Open();出错时,会执行
tran.Rollback();但是此时tran还没有初始化是null.
谢谢提醒
///<summary>
///.net万能事务
///</summary>
看到这句,我笑了。哈哈。
客官见笑了