private void btnConfigure_Click(object sender, EventArgs e)
{
try
{
dbConfigure dc = new dbConfigure();
SqlTransaction tr = conn.BeginTransaction();
cmd.Transaction = tr;
if (dc.configuration(cmd, ps.tableNames))
tr.Commit();
else
{
tr.Rollback();
mesg.show("Transaction is Rolled back");
}
}
catch (Exception ex)
{
mesg.show(ex.Message);
}
}
如果我在configuration
方法的任何地方遇到问题,那么它会返回 false,我可以看到该消息Transaction is Rolled Back
。但实际上事务并没有完全回滚,并且尽管回滚,但该函数对数据库结构所做的一些更改仍然存在,这是非常不希望的。我的问题是事务回滚发生故障的可能性是什么?
除了共享(以上)方法外,我的项目中没有其他任何交易
小细节
我正在调用configuration
我班级的一个非常冗长/复杂的函数dbConfigure
。它对数据库结构进行了一些必要的更改。例如它
- 丢弃外键
- 删除主键
删除自动增量字段
它在删除之前保存这些键并以所需的顺序/位置重新创建
conn
是一个SqlConnection
已经打开的,除此之外我没有使用任何连接
cmd
conn.CreateCommand()
除了这个,我在任何地方都没有使用任何命令吗
在整个过程中我从不关闭连接,但是 SqlDataReader 在configuration
完成工作时会关闭功能。