Teď jste offline a čekáte, až se znova připojí internet.

Jak používat transakce COM + v součásti Visual Basic .NET

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:315707
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Souhrn
Tento článek ukazuje, jak použít COM + (Component Services) transakce třídy Visual Basic .NET. Sadu operací databáze je považovány za jednu jednotku. Operace buď všechny úspěšné nebo, pokud jedna operace selže, selže celý transakce. V druhém případě databázové operace, které byly pokusu nejsou zaúčtovány do podkladové databáze.

back to the top

Požadavky

Následující položky popisují doporučený hardware, software, síťovou infrastrukturu, dovednosti a znalosti a aktualizace service Pack:
  • Microsoft Windows 2000 Server se systémem SP-1
  • Internetová informační služba (IIS) verze 4.0 nebo novější
  • Microsoft Internet Explorer verze 5.0, 5.5 nebo 6.0
Požadováno předchozí znalosti:
  • Znalost transakční koncepty a zpracování
  • Znalost COM + (služby komponent)
back to the top

Transakční služby COM +

Obor názvů služby System.EnterpriseServices v rámci Microsoft rozhraní.NET Framework poskytuje funkce implementovat zpracování transakcí. Získat přístup k COM + transakční služby vytvoření třídy pomocí následujících kroků:
  1. Otevřete Visual Studio .NET.
  2. Vytvoření nového projektu knihovny třídy s názvem prjEnterprise Visual Basic .NET. Visual Basic .NET vytvoří veřejné třídy s názvem Class1.
  3. Knihovny služby System.EnterpriseServices přidat odkaz na projekt. V okně Solution Explorer klepněte pravým tlačítkem myši na složku odkazy a z místní nabídky vyberte Přidat odkaz. Na kartě .NET procházejte, dokud vyhledejte služby System.EnterpriseServices. Poklepejte na služby System.EnterpriseServices zkontrolujte služby System.EnterpriseServices se zobrazí v okně vybrané součásti a klepněte na tlačítko OK.
  4. Použití příkazu Imports pro obor názvů System.EntpriseServices a oboru názvů System.data.SqlClient, že nebudete mít plně kvalifikovat žádné odkazy na tyto obory názvů později v kódu. Tyto příkazy musí se před ostatní příkazy v souboru třídy:
    	Imports System.EnterpriseServicesImports System.Data.SqlClient
  5. Chcete-li použít transakční služby COM +, třídy s názvem clsES, musí dědit funkce z ServicedComponent:
    	Public Class clsESInherits ServicedComponent
  6. Atribut transakce se používá k určení úrovně transakční podpory pro třídu:
    <Transaction(TransactionOption.Required)> Public Class clsES   	Inherits ServicedComponent
  7. Vytvořit metodu v rámci clsES nazývá 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:
    	Public Sub dbAccess (ByVal pid1 As Integer, _ByVal onOrder As Integer, _      ByVal pid2 As Integer, ByVal inStock As Integer)
  8. V metodě dbAccess vytvořit objekt připojení SQL Northwind databázi a otevřete připojení. Operace databáze probíhat pomocí této databáze:
    Dim Conn As New _  SqlConnection("uid=sa;database=northwind;server=localhost")Conn.Open()
  9. Nastavit bloku zkuste zachytávání žádné zpracování databáze, které mohou nastat. Tyto chyby musí být zachycena k moci přerušení transakce. Zkuste bloku bude obsahovat dvě operace databáze jednotlivé aktualizace jiné pole v záznamu tabulky určené produkty.
    		Try
  10. Provést první aktualizaci tabulky produkty. Aktualizovat UnitsonOrder pole s hodnotou onOrder produktu s ID, zadané v první dva vstupní parametry. SQLcommand slouží ke spuštění této aktualizace SQL:
    	   Dim Cmd As SqlCommand      Dim sqlString As String = _           "update products set UnitsonOrder = " & onOrder _           & " where productId = " & pid1               Cmd = New SqlCommand(sqlString, Conn)      Cmd.ExecuteNonQuery()
  11. Provést jiné aktualizaci tabulky produkty. Aktualizovat pole JednotkyNaSkladě s hodnotou inStock pro produkt s ID, zadané v třetí a čtvrtý vstupní parametry. SQLCommand slouží ke spuštění této aktualizace SQL:
          sqlString = _"update products set UnitsinStock = " _& inStock & " where productId = " & pid2                 Cmd.CommandText = sqlString      Cmd.ExecuteNonQuery()
  12. Protože tyto aktualizace jsou součástí transakce COM +, jsou jako jednotka potvrzené. Pokud žádné chyby byly vyvolána metoda setComplete třídy contextUtil z oboru názvů služby System.EnterpriseServices slouží k potvrzení transakce--v tomto případě dvě aktualizace:
          ContextUtil.SetComplete()
  13. Připojení k databázi Northwind uzavřeno:
          Conn.Close()
  14. Aby bylo přerušeno celá transakce musí být zachycena chyby, ke kterým dochází při spuštění příkazů SQL:
    	   Catch e As Exception
  15. Metoda setAbort contextUtil 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		End Try
  16. V pořadí pro tuto součást správně fungovat součást musí mít silného názvu. Takto generovat silného názvu a podepsat sestavení se silným názvem:

    1. Otevřete příkazový řádek Visual Studio .NET, klepněte na tlačítko Start, klepněte na příkaz programy, klepněte na položku Microsoft Visual Studio.NET a klepněte na položku Visual Studio.NET Tools.
    2. Na příkazovém řádku zadejte sn.exe -k snEnterprise.snk poskytnout váš sestavení silného názvu.

      Další informace o podepisování sestavení s silné názvy naleznete dokumentaci .NET Framework SDK.
    3. SnEnterprise.snk zkopírujte do složky projektu.
    4. V AssemblyInfo.vb, přidejte následující řádek kódu, před nebo za jiné příkazy atribut sestavení:
      <Assembly: AssemblyKeyFileAttribute("..\..\snEnterprise.snk")>
    5. Uložit a vytvořit projektu.
back to the top

Úplný výpis kódu

Imports System.Data.SqlClientImports System.EnterpriseServices<Transaction(TransactionOption.Required)> Public Class ClsES    Inherits ServicedComponentPublic Sub dbAccess(ByVal pid1 As Integer, ByVal onOrder As Integer, _      ByVal pid2 As Integer, ByVal inStock As Integer)        Dim Conn As New _          SqlConnection("uid=sa;database=northwind;server=localhost")          Conn.Open()        Try          Dim Cmd As SqlCommand          Dim sqlString As String = _             "update products set UnitsonOrder = " & _              onOrder & " where productId = " & pid1          Cmd = New SqlCommand(sqlString, Conn)          Cmd.ExecuteNonQuery()          sqlString = _         " update products set UnitsinStock = " & inStock & _                " where productId = " & pid2           Cmd.CommandText = sqlString           Cmd.ExecuteNonQuery()           ContextUtil.SetComplete()           Conn.Close()                 Catch e As Exception            ContextUtil.SetAbort()		  Throw e        End Try    End Sub End Class
back to the top

Ověřte, zda funguje

Testovat tento kód vytvořit konzoly aplikace používající 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 nezdaří, protože číslo určený produkt neexistuje v tabulce Výrobky. Výsledkem selhání transakce s transakcí ignorován.
  1. Přidat novou aplikaci konzoly s názvem testES řešení, takže testES projektu a prjEnterprise projektu obsahuje řešení. Přidat nový projekt, klepněte v nabídce soubor na příkaz Nový a vyberte projekt.
  2. Zobrazí se dialogové okno Nový projekt. Vyberte složku jazyka v projektu typy podokně a potom vyberte Aplikace konzoly ze šablon. V poli název v podokně šablony zadejte testES, což je název projektu. Zkontrolujte, zda je vybráno tlačítko Přidat k řešení, které se zobrazí v dolní části dialogové okno. Klepnutím na tlačítko OK přidejte tento projekt řešení.
  3. V pořadí testES otestovat clsES musíte přidat odkaz. V okně Solutions klepněte pravým tlačítkem myši na složku odkazy, které je pod testES projektu, které jste právě přidali. Vyberte možnost Přidat odkaz. Zobrazí se dialogové okno Přidat odkaz.
  4. Vyberte kartu projekty a poklepejte na prjEnterprise. Odkaz by se měla zobrazit ve Vybrané součásti, což je v dolní části dialogového okna. Klepněte na tlačítko OK přidejte tento odkaz na tento projekt.
  5. Aplikace konzoly testES klepněte pravým tlačítkem myši a vyberte nastavit jako spouštěcí Project.
  6. V nabídce Debug vyberte Windows. V podnabídce vyberte Okamžité. Tím zajistíte viditelný okna Immediate.
  7. Kopírovat test následující kód do modulu Module1 nahrazení příkazy Sub Main a End Sub. Modul by měla vypadat takto:
        Sub Main()        Dim myTest As New prjEnterprise.clsES()        Try            myTest.dbAccess(1, 777, 2, 888)            Debug.WriteLine("TRANSACTION ONE -- SUCCESS")                       myTest.dbAccess(1, 5, 2, -20)            Debug.WriteLine("TRANSACTION TWO -- SUCCESS")                Catch            Debug.WriteLine("TRANSACTION FAILURE")        End Try    End Sub
  8. Stisknutím klávesy F5 spustit testovací kód.
  9. V kódu v kroku 7 první volání dbAccess úspěšné. Produkt 1 a 2 produktu jsou v tabulce Výrobky. Aktualizaci pole onOrder pro produkt 1 777 a inStock pole pro produkt 2 je aktualizován 888. Protože tato transakce proběhla úspěšně, měli okna Immediate zobrazit zprávu "TRANSACTION jednu - úspěch".

    Druhé volání dbAccess selže. Proto ani jeden příkazů aktualizace v rámci dbAccess Výrobky je tabulka 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 rámci definice tabulky produktů inStock není povoleno mít záporná čísla.

    Proto toto volání dbAccess selže, výsledkem selhání celá transakce. V Tabulce Výrobky zůstane jako bylo před volání dbAccess. Příkaz zachytit zpracovává oznámení o selhání transakce z dbAccess výsledné zprávy "TRANSACTION FAILURE" právě zobrazené v okně Immediate.
Zkontrolujte obsah tabulky Výrobky Northwind pomocí SQL Server Enterprise Manager. Při zobrazení produktu 1 se rovná 777; pro produkt 2, pole onOrderinstock 888 je pole. Následkem toho druhé volání dbAccess, který by způsobil v různé hodnoty těchto polí se nezdařilo.

back to the top

Odstraňování potíží

  • 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 nalezeny 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 získává přidružené metoda 1 200 sekund k dokončení všech transakcí před časový limit:
    <Transaction(TransactionOption.Required, timeout:=1200) >
back to the top
Odkazy
Další informace navštivte následující webové servery Microsoft Developer Network (MSDN):
COM + Integration: Jak je lze nápovědy služby .NET Enterprise sestavit distribuovaných aplikací
http://msdn.microsoft.com/msdnmag/issues/01/10/complus/

Součásti servisu
http://msdn.microsoft.com/en-us/library/aa289839.aspx
back to the top

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 315707 - Poslední kontrola: 12/07/2015 08:36:18 - Revize: 3.2

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowtomaster KB315707 KbMtcs
Váš názor