Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用和交易_C#_Sql_Firebird - Fatal编程技术网

C# 使用和交易

C# 使用和交易,c#,sql,firebird,C#,Sql,Firebird,请让我知道下面的代码是否正确。 我的意思是连接已关闭并已处理和事务已关闭并已处理,并在异常情况下回滚。 欢迎提出任何其他建议 谢谢,, 阿德里亚 是的,这段代码看起来很好。我可能会使用事务作用域,但不确定是否处理事务会回滚它,而TransactionScope会 using (var scope = new TransactionScope()) using (var c = new FbConnection(m_connection)) { using (var cmd = n

请让我知道下面的代码是否正确。 我的意思是连接已关闭并已处理事务已关闭并已处理,并在异常情况下回滚。 欢迎提出任何其他建议

谢谢,, 阿德里亚


是的,这段代码看起来很好。

我可能会使用事务作用域,但不确定是否处理事务会回滚它,而TransactionScope会

using (var scope = new TransactionScope())
using (var c = new FbConnection(m_connection))
{
        using (var cmd = new FbCommand("DELETE_MESSAGES_QUEUE", c))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add("INQUEUENAME", queueName);

            cmd.ExecuteNonQuery();
        }
        using (var cmd = new FbCommand("DELETE_QUEUE", c))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add("INQUEUENAME", queueName);

            cmd.ExecuteNonQuery();
        }
        scope.Complete();
}
是的。该方法将处理底层事务,如果事务仍在运行,则执行回滚()


如果异常发生在服务器端(或连接丢失),则服务器回滚事务。

如果引发异常,FbTransaction是否回滚?但您可以检查它。将您的SP除以零(导致异常),然后查看事务是否会回滚。从flamerobin建立SYSDBA连接,并在监视表中查看哪些连接/事务/语句处于活动状态或关闭状态。SqlTransaction在回滚时释放。我不知道这件事。使用TransactionScope可能有效,也可能无效,这取决于FbConnection是否支持它。
using (var scope = new TransactionScope())
using (var c = new FbConnection(m_connection))
{
        using (var cmd = new FbCommand("DELETE_MESSAGES_QUEUE", c))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add("INQUEUENAME", queueName);

            cmd.ExecuteNonQuery();
        }
        using (var cmd = new FbCommand("DELETE_QUEUE", c))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add("INQUEUENAME", queueName);

            cmd.ExecuteNonQuery();
        }
        scope.Complete();
}