Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Transakce je sada souvisejících úkolů, které buď jsou úspěšné (potvrzení transakce), nebo selžou (přerušení/cancelace transakce) jako celek, mimo jiné. Distribuovaná transakce je transakce , která ovlivňuje několik prostředků. Aby distribuovaná transakce byla potvrzena, musí všichni účastníci zaručit, že jakákoli změna dat bude trvalá. Změny musíte zachovat navzdory zhroucení systému nebo jiné nepředvídatelné události. Pokud se i jeden účastník nepodaří tuto záruku provést, celá transakce selže a všechny změny dat v rozsahu transakce se vrátí zpět.
Poznámka:
Výjimka bude vyvolána, pokud se pokusíte potvrdit nebo vrátit transakci v případě, že DataReader je spuštěna a transakce je aktivní.
Práce se System.Transactions
V rozhraní .NET Framework se distribuované transakce spravují pomocí rozhraní API v oboru názvů System.Transactions. Rozhraní System.Transactions API deleguje zpracování distribuovaných transakcí na monitor transakcí, jako je například Koordinátor distribuovaných transakcí společnosti Microsoft (MS DTC), pokud je zapojeno více trvalých správců prostředků. Další informace naleznete v tématu Základy transakcí.
ADO.NET 2.0 zavedlo podporu pro zařazení do distribuované transakce pomocí EnlistTransaction metody, která zařadí připojení do Transaction instance. V předchozích verzích ADO.NET se explicitní začlenění do distribuovaných transakcí provádělo pomocí metody EnlistDistributedTransaction pro začlenění připojení do instance ITransaction, což je podporováno pro zpětnou kompatibilitu. Další informace o transakcích enterprise services naleznete v tématu Interoperabilita s podnikovými službami a transakcemi modelu COM+.
Při použití System.Transactions transakce s poskytovatelem rozhraní .NET Framework pro SQL Server vůči databázi SQL Serveru se automaticky použije odlehčený Transaction. Transakce se pak dá zvýšit na úplnou distribuovanou transakci podle potřeby. Další informace naleznete v tématu System.Transactions Integrace s SQL Serverem.
Poznámka:
Maximální počet distribuovaných transakcí, které se databáze Oracle může účastnit najednou, je ve výchozím nastavení nastaven na 10. Po desáté transakci při připojení k databázi Oracle je vyvolána výjimka. Oracle nepodporuje DDL uvnitř distribuované transakce.
Automatické zařazení do distribuované transakce
Automatické zařazení je výchozí (a upřednostňovaný) způsob integrace připojení ADO.NET s System.Transactions. Objekt připojení se automaticky zapíše do existující distribuované transakce, pokud zjistí, že transakce je aktivní, což System.Transaction znamená, že Transaction.Current není null. Při otevření připojení dojde k automatickému zařazení transakce. Nestane se poté, i když se příkaz spustí uvnitř oboru transakce. Automatické zařazení můžete zakázat v existujících transakcích zadáním Enlist=false jako parametru řetězce připojení pro SqlConnection.ConnectionString, nebo OLE DB Services=-7 jako parametru řetězce připojení pro OleDbConnection.ConnectionString. Další informace o parametrech připojovacích řetězců Oracle a ODBC naleznete v OracleConnection.ConnectionString a OdbcConnection.ConnectionString.
Ruční zapojení do distribuované transakce
Pokud je automatické zařazení zakázáno nebo potřebujete přidat transakci, která byla spuštěna po otevření připojení, můžete se zařadit do existující distribuované transakce pomocí metody EnlistTransaction objektu DbConnection pro zprostředkovatele, se kterým pracujete. Zařazení do existující distribuované transakce zajišťuje, že pokud je transakce potvrzena nebo vrácena zpět, změny provedené kódem ve zdroji dat budou potvrzeny nebo vráceny zpět.
Zapojení do distribuovaných transakcí je obzvláště důležité při sdružování obchodních objektů. Pokud je obchodní objekt zahrnut ve fondu s otevřeným připojením, k automatickému zařazení transakce dojde pouze při otevření tohoto připojení. Pokud se pomocí fondu obchodního objektu provádí více transakcí, otevřené připojení pro tento objekt se automaticky nezařadí do nově zahájených transakcí. V tomto případě můžete zakázat automatické zařazení transakce pro připojení a zapojit připojení do transakcí pomocí EnlistTransaction.
EnlistTransaction přebírá jeden argument typu Transaction , který je odkazem na existující transakci. Po volání metody připojení EnlistTransaction jsou všechny změny provedené ve zdroji dat pomocí připojení zahrnuty do transakce. Předání hodnoty null vymkne připojení z jeho aktuálního zařazení do distribuované transakce. Upozorňujeme, že připojení musí být otevřeno před voláním EnlistTransaction.
Poznámka:
Jakmile je připojení explicitně zařazeno do transakce, nelze jej zrušit nebo zahrnout do jiné transakce, dokud první transakce nedokončí.
Upozornění
EnlistTransaction vyvolá výjimku, pokud připojení již zahájilo transakci pomocí metody připojení BeginTransaction . Pokud je však transakce místní transakce je spuštěna ve zdroji dat (například spuštění příkazu BEGIN TRANSACTION explicitně pomocí SqlCommand), EnlistTransaction vrátí zpět místní transakci a připojí se k existující distribuované transakci, jak je požadováno. Nebudete dostávat oznámení o tom, že místní transakce byla vrácena zpět, a musíte spravovat všechny místní transakce, které nezačaly používat BeginTransaction. Jestliže používáte rozhraní .NET Framework Data Provider pro SQL Server (SqlClient) se serverem SQL, pokus o zařazení vyvolá výjimku. Všechny ostatní případy zůstanou nezjištěné.
Povýšitelné transakce v SQL Serveru
SQL Server podporuje propagační transakce, ve kterých lze místní odlehčenou transakci automaticky zvýšit na distribuovanou transakci pouze v případě, že je vyžadována. Propagační transakce nevyvolává přidanou režii distribuované transakce, pokud není vyžadována přidaná režie. Další informace a ukázku kódu naleznete v tématu System.Transactions Integrace s SQL Serverem.
Konfigurace distribuovaných transakcí
Možná budete muset povolit MS DTC přes síť, aby bylo možné používat distribuované transakce. Pokud je povolená brána Windows Firewall, musíte službě MS DTC povolit, aby používala síť nebo otevřela port MS DTC.
Viz také
- Transakce a souběžnost
- Integrace System.Transactions s SQL Serverem
- Přehled ADO.NET