读书人

怎么将事务执行情况写入数据库中?

发布时间: 2012-01-20 18:53:53 作者: rapoo

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

读书人网 >C#

热点推荐