如何将事务执行情况写入数据库中??

kingnew 2007-03-20 10:27:34
如下代码中,在try中,每一名sql语句执行成功都会在日记表中插入一行记录,如果有任何一句sql语句失败的话,则所有语句都会回滚,问题是插入的日志也会被回滚掉,怎样才能使日志不被回滚呢?

SqlConnection conn = new SqlConnection(connectionstring)
conn.Open();
SqlTransaction tran = conn.BeginTransaction();

try
{
SqlHelper.ExecSql(tran, sql1);
WriteNote("sql1执行成功");
SqlHelper.ExecSql(tran, sql2);
WriteNote("sql2执行成功");
SqlHelper.ExecSql(tran, sql3);
WriteNote("sql3执行成功");
SqlHelper.ExecSql(tran, sql4);
WriteNote("sql4执行成功");

tran.Commit();
}
catch
{
tran.Rollback();
}

function void WriteNote(string txt)
{
string sql = "insert into Note (txt) values (" + txt + ")";
......
}
...全文
302 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgroup 2007-03-20
  • 打赏
  • 举报
回复
使用不同的连接即可,只要写入日志的连接和数据操作的连接不是一个连接,数据操作的连接中的事务即使回滚,也不影响日志使用的连接。
withcsharp 2007-03-20
  • 打赏
  • 举报
回复
日志 用另外的 连接插入
hertcloud 2007-03-20
  • 打赏
  • 举报
回复
SqlConnection conn = new SqlConnection(connectionstring)
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
string[] msg = new {"","","",""};
try
{

SqlHelper.ExecSql(tran, sql1);
msg[0] = "sql1执行成功";
SqlHelper.ExecSql(tran, sql2);
msg[1] = "sql2执行成功";
SqlHelper.ExecSql(tran, sql3);
msg[2] = "sql3执行成功";
SqlHelper.ExecSql(tran, sql4);
msg[4] = "sql4执行成功";

tran.Commit();
}
catch
{
tran.Rollback();
}
finally
{
//--这个方法有个问题 不能确保消息插入一定成功.

for(int ix=0; ix<msg.Length; ix++)
{
if(msg[ix] != "")
{
string sql = "insert into Note (txt) values (" + msg[ix] + ")";
SqlHelper.ExecSql(conn, sql);
}
}

conn.Close();
}
yumanqing 2007-03-20
  • 打赏
  • 举报
回复
把日志写入文件中,就不会了
kingnew 2007-03-20
  • 打赏
  • 举报
回复
谢谢大家的解答,问题已解决,用不同的连接即可解决此问题。
wzq6511 2007-03-20
  • 打赏
  • 举报
回复
最好是用一个文件保存
lxwin01 2007-03-20
  • 打赏
  • 举报
回复
是的,事务用的连接与日志用的连接不是同一个连接就不会影响。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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