Jak používat transakce COM + v součásti Visual C#

Překlady článku Překlady článku
ID článku: 816141 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento podrobný článek popisuje způsob použití COM + (služby komponent) transakcí v třídy Visual C#. Sadu operací databáze je považován za jednu jednotku. Buď proběhnou všechny operace úspěšně, nebo pokud jedna operace selže, selže celý transakce. V druhém případě není databázové operace, které byly zaúčtovány na podkladové databáze.

Požadavky

Následující položky popisují doporučený hardware, software, síťovou infrastrukturu, dovednosti a znalostní a aktualizace service Pack, které musí mít:
  • Microsoft Windows 2000 Server SP1
  • Internetová informační služba (IIS) verze 4.0 nebo novější
  • Aplikace Microsoft Internet Explorer verze 5.0, 5.5 nebo 6.0
Tento článek předpokládá s následující:
  • Transakční koncepty a zpracování
  • COM + (služby komponent)

Transakční služby

Můžete implementovat s oborem názvů služby System.EnterpriseServices v Microsoft .NET Framework zpracování transakcí. Transakční služby přístup COM + vytvoření třídy. Postupujte takto:
  1. Spustit Visual Studio .NET nebo Visual Studio 2005.
  2. V nabídce soubor přejděte na příkaz Nový a klepněte na příkaz projekt.
  3. Klepněte v části Typy projektuVisual C# projekty a v části šablony klepněte na příkaz Knihovny tříd. Název projektu prjEnterprise.

    Poznámka: V aplikaci Visual Studio 2005 klepněte Visual C# v části Typy projektu a v části šablony klepněte na příkaz Knihovny tříd. Název projektu prjEnterprise.
  4. Ve výchozím nastavení je vytvořen Class1.
  5. V aplikaci Solution Explorer klepněte pravým tlačítkem myši odkazy a potom klepněte na tlačítko Přidat odkaz.
  6. Zobrazí se dialogové okno Přidat odkaz. V části Název součásti na kartě .NET poklepejte služby System.EnterpriseServices.
  7. Ujistěte se, že služby System.EnterpriseServices se zobrazí v části Vybrané součásti. Klepněte na tlačítko OK.
  8. Přidejte následující kód před ostatní příkazy v souboru Class1.cs:
    using System.EnterpriseServices;
    using System.Data.SqlClient;
  9. Přidat novou třídu s názvem clsES souboru Class1.cs.
  10. Použití transakční služby COM +, třída (clsES) musí dědit funkce z ServicedComponent způsobem:
    public class clsES : ServicedComponent
  11. Atribut Transaction je použit ur?ení úroveň transakční podporu pro třídu:
    [Transaction(TransactionOption.Required)]public class clsES : ServicedComponent
  12. Vytvořit metodu třídy clsES a název dbAccess obdrží čtyři parametry vstupní celé číslo. První dva parametry poskytnout ID produktu a jednotky na objednávce pro daný produkt. Druhý dva parametry poskytnout ID produktu a jednotky na skladě pro daný produkt. Tato metoda provádí sadu operací databáze proti tyto zadaný kód product ID, které jsou považovány za transakce:
    void dbAccess(int pID1,int onOrder, int pID2, int inStock)
  13. V metodě dbAccess vytvořit objekt připojení SQL Northwind databázi a otevřete připojení. Operace databáze dojít pomocí následující databáze:

    Poznámka: Nezapomeňte změnit následující parametry řetězec připojení tak, aby odrážel správné hodnoty SQL serveru.
    SqlConnection Conn = new SqlConnection("user id=<username>;password=<strong password>;Initial Catalog=northwind;Data Source=2E124\\SQL;");
    				Conn.Open();
    
  14. Nastavit akci bloku k zachycení výjimek, které mohou nastat během zpracování databáze. Tyto výjimky přerušení transakce musí zachytit. Zkuste bloku zahrnuje dvě operace databáze. Každé operace aktualizuje jiné pole v zadané produkty tabulky záznam.
     try { 
    
  15. Provést první aktualizaci tabulky produkty. Aktualizovat UnitsonOrder pole s hodnotou onOrder produktu s ID, zadané v první dva vstupní parametry. Použít následující příkaz SQL ke spuštění této aktualizace SQL:
    SqlCommand sqlCommand = new SqlCommand("UPDATE myProducts SET UnitsonOrder = " + onOrder + " WHERE productID = " + pID1, Conn);
    				sqlCommand.ExecuteNonQuery();
  16. Provést jiné aktualizaci tabulky produkty. Aktualizace pole JednotkyNaSkladě s inStock hodnotu pro produkt s ID, zadané v třetí a čtvrtý vstupní parametry. Použít následující příkaz SQL ke spuštění této aktualizace SQL:
    sqlCommand.CommandText = "UPDATE myProducts SET UnitsinStock = " + inStock + " WHERE productID = " + pID2;
    				sqlCommand.ExecuteNonQuery();
    
  17. Protože tyto aktualizace jsou součástí transakce COM +, jsou jako jednotka potvrzené. Metoda setCompletecontextUtil třídu z oboru názvů služby System.EnterpriseServices slouží k potvrzení transakce (v tomto případě dvě aktualizuje) Pokud byly vyvolána žádné chyby:
    ContextUtil.SetComplete();
  18. Připojení k databázi Northwind uzavřeno:
    Conn.Close();
    }
  19. Musí zachytit výjimky, které se vyskytnou při spuštění příkazů SQL, takže přerušení celé transakce:
    catch(Exception e){ 
  20. Metoda setAbortcontextUtil třídu z oboru názvů služby System.EnterpriseServices slouží k přerušení celé transakce. Pokud je první aktualizace úspěšné a druhý aktualizace nezdaří, ani aktualizace zaúčtována do tabulky produkty. Vyvolání výjimky zachytil volajícímu označující, že transakce se nezdařilo:
    ContextUtil.SetAbort();
    				throw e;
    }
  21. Pro tuto součást fungovat správně musí mít součást silného názvu. Generovat silného názvu a podepsat sestavení se silným názvem. Postupujte takto:
    1. Visual Studio .NET příkazového řádku zadejte snEnterprise.snk sn.exe -k vytvoření souboru klíče. Další informace o podepisování sestavení s silné názvy dokumentaci .NET Framework SDK.
    2. SnEnterprise.snk zkopírujte do složky projektu.
    3. V AssemblyInfo.vc, přidejte následující řádek kódu, před nebo za jiné příkazy atribut sestavení:
      [assembly: AssemblyKeyFileAttribute("..\\..\\snEnterprise.snk")]		
    4. Uložit a vytvořit projektu.

Úplný výpis kódu

Poznámka: Remember to change the following connection string parameters to reflect the correct values for your SQL Server server.
using System;
using System.Data;
using System.Data.SqlTypes;
using System.Data.Common;
using System.EnterpriseServices;
using System.Data.SqlClient;

namespace prjEnterprise
{
	
	[Transaction(TransactionOption.Required)]public class clsES:ServicedComponent
	{
		public SqlConnection Conn;

		public void dbAccess(int pID1, int onOrder, int pID2, int inStock)
		{
			try
			{			
				SqlConnection Conn = new SqlConnection("user id=<username>;password=<strong password>;Initial Catalog=northwind;Data Source=2E124\\SQL;");
				Conn.Open();
				
SqlCommand sqlCommand = new SqlCommand("UPDATE myProducts SET UnitsonOrder = " + onOrder + " WHERE productID = " + pID1, Conn);
				sqlCommand.ExecuteNonQuery();
				
				sqlCommand.CommandText = "UPDATE myProducts SET UnitsinStock = " + inStock + " WHERE productID = " + pID2;
				sqlCommand.ExecuteNonQuery();

				ContextUtil.SetComplete();
				Conn.Close();
			}
			catch(Exception e)
			{
				ContextUtil.SetAbort();
			
				throw e;
			}
			finally
			{

			}
		}
	}	
}

Ověřte, zda funguje IT

Testovat tento kód vytvořit konzoly aplikace používající projektu clsES. V jednom případě úspěšné transakce a onorder a instock pole určený produkt jsou aktualizována. V druhém případě aktualizace pole onOrder určený produkt úspěšná, a to ale aktualizace pro inStock pole pro produkt se nezdaří, protože číslo určený produkt neexistuje v tabulce Výrobky. Výsledkem je selhání transakce a transakce je ignorována.
  1. V Visual Studio .NET nebo Visual Studio 2005 přejděte na příkaz Nový v nabídce soubor a klepněte na příkaz projekt.
  2. Klepněte v části Typy projektuVisual C# projekty a klepněte v části šablonyAplikace konzoly.

    Poznámka: V aplikaci Visual Studio 2005 klepněte Visual C# v části Typy projektu a potom klepněte na tlačítko Aplikace konzoly v části šablony.
  3. Do textového pole název zadejte testES. Ujistěte se, zda je vybrána možnost Přidat k řešení.
  4. Klepnutím na tlačítko OK přidejte tento projekt řešení.
  5. TestES otestovat clsES musíte přidat odkaz. V aplikaci Solution Explorer klepněte pravým tlačítkem myši odkazy pod testES (právě přidaného) a potom klepněte na tlačítko Přidat odkaz.
  6. Zobrazí se dialogové okno Přidat odkaz. Na kartě projekty poklepejte prjEnterprise.
  7. Odkaz se zobrazí pod vybrané součásti. Klepněte na tlačítko OK přidejte tento odkaz k projektu.
  8. Knihovny služby System.EnterpriseServices přidat odkaz na projekt. V aplikaci Solution Explorer klepněte pravým tlačítkem myši odkazy a potom klepněte na tlačítko Přidat odkaz.
  9. Zobrazí se dialogové okno Přidat odkaz. V části Název součásti na kartě .NET poklepejte služby System.EnterpriseServices.
  10. Ujistěte se, že služby System.EnterpriseServices se zobrazí v části Vybrané součásti. Klepněte na tlačítko OK.
  11. Klepněte pravým tlačítkem na aplikaci konzole (testES) a potom klepněte na tlačítko nastavit jako spouštěcí Project
  12. Vložte následující kód zdroje v hlavní funkce třídy Class1:
    	prjEnterprise.clsES myTest = new prjEnterprise.clsES();
    
    				try 
    				{
    					myTest.dbAccess(1, 777, 2, 888);
    					Console.WriteLine("TRANSACTION ONE -- SUCCESS");
    
    					myTest.dbAccess(1, 5, 2, -20);
    					Console.WriteLine("TRANSACTION TWO -- SUCCESS");
    				}
    				catch (Exception e)
    				{
    					Console.WriteLine("TRANSACTION FAILURE");
    				}
  13. Stisknutím klávesy F5 spustit testovací kód.

    V kódu v kroku 7 první volání dbAccess úspěšné. Produkt 1 a 2 produktů jsou v tabulce Výrobky. Aktualizaci pole onOrder pro produkt 1 777 a inStock pole pro technické 2 je aktualizován 888. Protože tato transakce proběhla úspěšně, zobrazí následující zpráva v okně výstupu
    ÚSPĚCH JEDNOHO - TRANSAKCE


    Druhé volání dbAccess selže. Proto ani příkaz update v dbAccess tabulky Výrobky je zaúčtována do databáze. Ačkoli produktu 1 by mít jeho onOrder pole aktualizována 5, produkt 2 nemůže mít jeho inStock pole nastavit -20. Z důvodu omezení definované v definici tabulky produktů inStock není povoleno mít záporná čísla.

    Proto toto volání dbAccess selže a celá transakce selže. Tabulky Výrobky zůstane jako bylo před volání dbAccess. Příkaz zachytit zpracovává oznámení o selhání transakce z dbAccess a zobrazí následující chybová zpráva v okně výstupu:
    SELHÁNÍ TRANSAKCE
  14. Zkontrolujte obsah tabulky Výrobky Northwind pomocí SQL Server Enterprise Manager. Při zobrazení produktu 1 se rovná 777 pole onOrder. Při zobrazení 2 produktů instock 888 je pole. Druhé volání dbAccess (který by způsobil různé hodnoty těchto polí) se tedy nezdaří.

Poradce při potížích

  • Zkontrolujte, zda má projekt, který používá služby COM + silného názvu.
  • Třída, která používá služby COM + musí dědit z servisu součásti. Součást servisu je umístěn v oboru názvů služby System.EnterpriseServices.
  • Při ladění, může transakce časového limitu před potvrzena nebo přerušena. Chcete-li se vyhnout časový limit, použijte vlastnost časový limit atribut transakce. V následujícím příkladu má související metodu 1 200 sekund před časový limit dokončení libovolné transakci:
    [Transaction(TransactionOption.Required,timeout=1200)]

Odkazy

Další informace navštivte následující webové servery Microsoft Developer Network (MSDN):
COM + Integration: Jak .NET Enterprise Services může Nápověda je sestavit distribuovaných aplikací
http://msdn.microsoft.com/msdnmag/issues/01/10/complus/default.aspx
Součásti servisu
http://msdn2.microsoft.com/en-us/library/Aa289839(VS.71).aspx

Vlastnosti

ID článku: 816141 - Poslední aktualizace: 22. listopadu 2007 - Revize: 4.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Klíčová slova: 
kbmt kbcomplusobj kbsqlprog kbsqlclient kbdatabase kbhowtomaster KB816141 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:816141

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com