Błąd" operacja nie jest ważna dla stanu transakcji " i zakres transakcji

Podczas próby wywołania procedury składowanej zawierającej instrukcję SELECT pojawia się następujący błąd:

Operacja nie jest ważna dla stanu transakcji

Oto struktura moich połączeń:

public void MyAddUpdateMethod()
{

    using (TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew))
    {
        using(SQLServer Sql = new SQLServer(this.m_connstring))
        {
            //do my first add update statement

            //do my call to the select statement sp
            bool DoesRecordExist = this.SelectStatementCall(id)
        }
    }
}

public bool SelectStatementCall(System.Guid id)
{
    using(SQLServer Sql = new SQLServer(this.m_connstring)) //breaks on this line
    {
        //create parameters
        //
    }
}

Czy mam problem z utworzeniem innego połączenia do tej samej bazy danych w ramach transakcji?

Author: Avi Turner, 2008-10-11

5 answers

Po przeprowadzeniu pewnych badań, wydaje się, że nie mogę mieć dwóch połączeń otwartych do tej samej bazy danych z blokiem TransactionScope. Musiałem zmodyfikować mój kod, aby wyglądał tak:

public void MyAddUpdateMethod()
{
    using (TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew))
    {
        using(SQLServer Sql = new SQLServer(this.m_connstring))
        {
            //do my first add update statement            
        }

        //removed the method call from the first sql server using statement
        bool DoesRecordExist = this.SelectStatementCall(id)
    }
}

public bool SelectStatementCall(System.Guid id)
{
    using(SQLServer Sql = new SQLServer(this.m_connstring))
    {
        //create parameters
    }
}
 47
Author: Michael Kniskern,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 00:03:39

Ja też natknąłem się na ten sam problem, zmieniłem limit czasu transakcji na 15 minut i działa. Mam nadzieję, że to pomoże.

TransactionOptions options = new TransactionOptions();
options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
options.Timeout = new TimeSpan(0, 15, 0);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required,options))
{
    sp1();
    sp2();
    ...

}
 7
Author: Sharique,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 11:36:21

Kiedy napotkałem ten wyjątek, pojawił się InnerException "limit czasu transakcji". Ponieważ było to podczas sesji debugowania, kiedy zatrzymałem mój kod na jakiś czas wewnątrz TransactionScope, zdecydowałem się zignorować ten problem.

Gdy ten konkretny wyjątek z timeoutem pojawia się w Kodeksie, myślę, że w poniższej sekcji u Ciebie .plik konfiguracyjny pomoże Ci:

<system.transactions> 
        <machineSettings maxTimeout="00:05:00" /> 
</system.transactions>
 6
Author: R. Schreurs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-06 13:37:20

Napotkałem ten błąd, gdy moja transakcja jest zagnieżdżona w innym. Czy jest możliwe, że procedura składowana deklaruje własną transakcję lub że funkcja wywołująca deklaruje taką transakcję?

 2
Author: Wyatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 21:55:00

Dla mnie ten błąd pojawił się, gdy próbowałem wycofać blok transakcji po napotkaniu wyjątku w innym bloku transakcji.

Wszystko, co musiałem zrobić, aby to naprawić, to usunąć mój wewnętrzny blok transakcji.

Podczas korzystania z zagnieżdżonych transakcji może być bardzo nieprzyjemnie, najlepiej tego uniknąć i po prostu zrestrukturyzować kod.

 0
Author: Vishav Premlall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-04 14:10:04