public static int DoTransaction(string addUser,SqlParameter [] userPars,string addUserInfo,SqlParameter [] userInfoPars,string addForgetPass,SqlParameter [] fps)
{
SqlTransaction tran = Conn.BeginTransaction();
try
{
SqlCommand comUsers = new SqlCommand(addUser, Conn);
comUsers.CommandType = CommandType.StoredProcedure;
comUsers.Parameters.AddRange(userPars);
comUsers.Transaction = tran; SqlCommand comUserInfo = new SqlCommand(addUserInfo, Conn);
comUserInfo.CommandType = CommandType.StoredProcedure;
comUserInfo.Parameters.AddRange(userInfoPars);
comUserInfo.Transaction = tran; SqlCommand comFs = new SqlCommand(addForgetPass, Conn);
comFs.CommandType = CommandType.StoredProcedure;
comFs.Parameters.AddRange(fps);
comFs.Transaction = tran; comUsers.ExecuteNonQuery();
comUserInfo.ExecuteNonQuery();
comFs.ExecuteNonQuery();
tran.Commit();
return 1;
}
catch(Exception ex)
{
return 0;
}
finally
{
tran.Dispose();
}
}在comFs执行ExecuteNonQuery的时候出错,为什么我查询数据库的时候上面2条语句已经执行,并没有回滚。仔细看看自己的代码跟网上的对比都一样啊。为什么就不回滚呢,由于是第一次使用这个类,所以请教各位下。
我曾经试过
在catch中加入rollback,但是运行时直接提示tran关闭,不能继续使用。 所以去掉了rollback
在这里先谢谢看帖的人了
是怎么回事呢?去掉Return 1; 加入Rollback();
看着比较古怪。这些都不需要了吧只要try里面出错 他就会回滚的.
tran.RollBack();
{
//方法1
//方法2
scope.Complete();
}
{
return 0;
}这么处理太简单了,你根本就无法知道出了什么问题,错误信息是什么。
conn.Open();
SqlCommand comm = new SqlCommand();
SqlTransaction Trans;
Trans = conn.BeginTransaction();
comm.Connection = conn;
comm.Transaction = Trans;
try
{
Trans.Commit();
}
catch
{
Trans.Rollback();
//出现错误,事务回滚!
}
finally
{
} 自己套吧,哈哈
catch (Exception ex)
{
transaction.Rollback();
throw new Exception(ex.Message);
}
在catch中加入rollback,但是运行时直接提示tran关闭,不能继续使用。 所以去掉了rollback这是一个返回int型
若无异常,说明操作成功 return 1。
若出现异常 则return 0
在页面处理的时候根据返回的数来判断是否成功
{
SqlCommand com = new SqlCommand();
com.Connection = Conn;
com.CommandType = CommandType.StoredProcedure;
SqlTransaction tran = Conn.BeginTransaction();
com.Transaction = tran;
try
{
com.CommandText = addUser;
com.Parameters.AddRange(userPars);
com.ExecuteNonQuery(); com.CommandText = addUserInfo;
com.Parameters.AddRange(userInfoPars);
com.ExecuteNonQuery(); com.CommandText = addForgetPass;
com.Parameters.AddRange(fps);
com.ExecuteNonQuery();
tran.Commit();
return 1;
}
catch(Exception ex)
{
tran.Rollback();
return 0;
}
finally
{
tran.Dispose();
}
}
{
int flag = 0;
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString = "连接字符串";
SqlTransaction tran = Conn.BeginTransaction();
SqlCommand comUsers = new SqlCommand();
comUsers.Connection = Conn;
comUsers.Transaction = tran;
comUsers.CommandType = CommandType.StoredProcedure;
try
{
comUsers.Parameters.AddRange(userPars);
comUsers.ExecuteNonQuery(); comUsers.Parameters.AddRange(userInfoPars);
comUsers.Transaction = tran;
comUsers.ExecuteNonQuery();
comUsers.Parameters.AddRange(fps);
comUsers.Transaction = tran;
comUsers.ExecuteNonQuery();
tran.Commit();
flag= 1;
}
catch (Exception ex)
{
tran.Rollback();
}
finally
{ tran.Dispose();
}
return flag;
}写了个 拿去测试吧