如何将事务执行情况写入数据库中??
如下代码中,在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 + ") ";
......
}
------解决方案--------------------把日志写入文件中,就不会了
------解决方案--------------------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();
}
------解决方案--------------------日志 用另外的 连接插入
------解决方案--------------------使用不同的连接即可,只要写入日志的连接和数据操作的连接不是一个连接,数据操作的连接中的事务即使回滚,也不影响日志使用的连接。
------解决方案--------------------是的,事务用的连接与日志用的连接不是同一个连接就不会影响。
------解决方案--------------------最好是用一个文件保存