Postupy: Provést pomocí ServicedComponent v aplikaci Visual Basic .NET Distributed Transaction s zprostředkovatele .NET

Překlady článku Překlady článku
ID článku: 316627 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento podrobný článek demonstruje provádění distribuovaných transakcí pomocí zprostředkovatele .NET s třídy ServicedComponent. Ačkoli v tomto článku používá zprostředkovatele SqlClient .NET proti serveru Microsoft SQL Server, můžete použít poskytovatele spravované ODBC nebo OLE DB .NET.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a požadované aktualizace Service Pack:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server 7.0 nebo SQL Server 2000

Přehled

Instance třídy .NET Framework mohou účastnit automatické transakce, pokud připravit třídy učinit. V transakci zapsán každý zdroj, který přistupuje k instanci třídy nebo objektu. Například pokud objekt ADO.NET používá k zaúčtování na účet v databázi peněz, správce prostředků pro databázi Určuje zda je objekt spuštěna v transakci. Pokud objekt měli spustit v transakci, správce prostředků zapsán automaticky databáze v transakci.

Použijte následující proces připravit třídy účastnit se automatická transakce:
  1. Použít třídu TransactionAttribute třídy určit typ automatické transakce, které součásti požadavky.

    Typ transakce musí být členem výčtu TransactionOption. Například:
    <Transaction(TransactionOption.Required)> Public Class Bar
       Inherits ServicedComponent
       '. . .
    End Class
    					
  2. Odvození třídy z třídy ServicedComponent. ServicedComponent je základní třída všech tříd, které používají služby COM +.
  3. Podepsat sestavení se silným názvem zkontrolujte, zda sestavení obsahuje jedinečné dvojice klíčů.
  4. Zaregistrovat sestavení obsahuje třídu s katalogu COM +.

    Poznámka: Jestliže klient volá instanci vaší třídy je spravován společného jazykového modulu runtime, registrace provedena pro vás. Tento krok je nutný, pouze pokud Nespravovaná volající vytvoří a volá instance třídy. Použít nástroj instalace služeb .NET (regsvcs.exe) ručně zaregistrovat sestavení.
Další informace o přihlášení sestavení se silným názvem naleznete v následujícím tématu v průvodci výrobce Microsoft .NET Framework:
Podepisování sestavení s silný název
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconassigningassemblystrongname.asp
Další informace o tomto procesu naleznete v následujícím tématu .NET Framework Developer's Guide:
Automatická transakce a .NET Framework třídy
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconautomatictransactionsnetframeworkclasses.asp

Vytvoření projektu

  1. Takto vytvořit nový projekt aplikace konzoly Visual Basic .NET:
    1. Spusťte aplikaci Visual Studio .NET.
    2. V nabídce soubor přejděte na příkaz Nový a klepněte na příkaz projekt.
    3. V dialogovém okně Nový projekt klepněte v části Typy ProjectProjekty jazyka, klepněte v části šablonyAplikace konzoly a klepněte na tlačítko OK.
    4. V aplikaci Solution Explorer přejmenujte soubor Module1.vb jako DistributedTransaction.vb.
  2. Odstranit všechny kód ze souboru DistributedTransaction.vb.
  3. V nabídce projekt na tlačítko Přidat odkaz a přidat následující odkazy:
    • Služby System.EnterpriseServices
    • System.Data.dll

  4. Přidejte následující kód do souboru DistributedTransaction.vb:
    Imports System
    Imports System.Data.SqlClient
    Imports System.EnterpriseServices
    Imports System.Runtime.CompilerServices
    Imports System.Reflection
    
    <Assembly: ApplicationName("DistributedTransaction")> 
    <Assembly: AssemblyKeyFileAttribute("..\..\DistributedTransaction.snk")> 
    
    
    Namespace DistributedTransaction
    
        '<summary>
        'Summary description for Class1.
        '</summary>
        Module Module1
            '<summary>
            'The main entry point for the application.
            '</summary>
            <STAThread()> Sub Main()
                Try
                    Dim myDistributedTran As New DistributedTran()
                    myDistributedTran.TestDistributedTransaction()
                Catch e As System.Data.SqlClient.SqlException
                    System.Console.WriteLine("Transaction Aborted: Error returned: " + e.Message)
                End Try
            End Sub
        End Module
    
        '<summary>
        'Summary description for TestApp.
        '</summary>
        <Transaction(TransactionOption.Required)> Public Class DistributedTran
            Inherits ServicedComponent
    
            Public Sub DistributedTran()
            End Sub
    
            <AutoComplete()> Public Function TestDistributedTransaction() As String
    
    
                'The following Insert statement goes to the first server.
                'This Insert statement does not produce any errors. 
                Dim insertCmdSql As String = "Insert Into TestTransaction (Col1, Col2) Values (1,'Sql Test')"
    
                'The following Delete statement goes to the second server.
                'Because the table does not exist, this code throws an exception. 
                Dim exceptionCausingCmdSQL As String = "Delete from NonExistentTable"
    
                'The following connection strings create instances of two SqlConnection objects
                'to connect to two different SQL Server servers in your environment.
                'Modify the connection strings as necessary for your environment.
                Dim SqlConn1 As New SqlConnection("Server=Name_of_Server1;uid=User_Id;database=DatabaseName;pwd=Password")
                Dim SqlConn2 As New SqlConnection("Server=Name_of_Server2;uid=User_Id;database=DatabaseName;pwd=Password")
    
                Try
                    Dim insertCmd As New SqlCommand(insertCmdSql, SqlConn1)
                    Dim exceptionCausingCmd As New SqlCommand(exceptionCausingCmdSQL, SqlConn2)
    
                    'This command should run properly.
                    insertCmd.Connection.Open()
                    insertCmd.ExecuteNonQuery()
    
                    'This command results in an exception, which automatically rolls back
                    'the first command (the insertCmd command).
                    exceptionCausingCmd.Connection.Open()
                    Dim cmdResult As Integer = exceptionCausingCmd.ExecuteNonQuery()
    
                    SqlConn1.Close()
                    SqlConn2.Close()
    
                    Console.WriteLine("Hello")
    
                Catch ex As System.Data.SqlClient.SqlException
    
                    'After you catch the exception in this function, throw it.
                    'The service component receives this exception and aborts the
                    'transaction. The service component then throws the same exception,
                    'and the calling function receives the error message.
                    Console.WriteLine(ex.Message)
                    Throw (ex)
    
                Finally
    
                    'Close the connection.
                    If SqlConn1.State.ToString() = "Open" Then
                        SqlConn1.Close()
                    End If
    
                    If SqlConn2.State.ToString() = "Open" Then
                        SqlConn2.Close()
                    End If
    
                End Try
    
                Return "Success"
    
            End Function
    
        End Class
    End Namespace 
    					
  5. V nabídce soubor klepněte na tlačítko Uložit vše.
  6. Klepněte na tlačítko Start, přejděte na příkaz programy, přejděte na Microsoft Visual Studio.NET, přejděte na příkaz Nástroje Visual Studio .NET a klepněte na položku Visual Studio .NET příkazový.
  7. Otevřete složku obsahující projekt a spusťte následující příkaz k podepsání sestavení se silným názvem:
    DistributedTransaction.snk sn -k
  8. Sestavení aplikace.
  9. Vytvořit následující tabulku v první serveru SQL server:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestTransaction]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[TestTransaction]
    GO
    
    CREATE TABLE [dbo].[TestTransaction] (
    	[Col1] [int] NULL ,
    	[Col2] [varchar] (100) NULL 
    ) ON [PRIMARY]
    GO 
    					
  10. Spuštění aplikace. Všimněte si zobrazí následující chybová zpráva (což je očekávané chování):
    Přerušené transakce: Vrácena chyba: Neplatný objekt název 'NonExistentTable.
  11. SQL Server Query Analyzer otevřete, přidejte následující kód a stiskněte klávesu F5 spuštění dotazu:
    USE NORTHWIND;
    SELECT * FROM TestTransaction WHERE Col1=1 AND Col2='Sql Test'
    						
    Poznámka dotazu protože transakce byla přerušena nevrátí žádné řádky.
  12. Vyhledejte následující kód jazyka projektu:
    Dim exceptionCausingCmdSQL As String = "Delete from NonExistentTable"
    						
    a nahraďte příkaz SQL platný dotaz nezpůsobí přerušit transakci. Například:
    Dim exceptionCausingCmdSQL As String = "Select @@Identity from customers"
    					
  13. Stisknutím klávesy F5 kompilovat a spouštět aplikaci znovu.
  14. Příkaz spustit znovu od kroku 11 Query Analyzer. Všimněte si, že dotaz vrátí řádek, protože transakce byla moci úspěšně dokončit.
Poznámky:
  • Tento příklad neprovádí zpracování chyb.
  • SQL Server a Microsoft Distributed Transaction Coordinator (MS DTC) musí být spuštěna na všechny klienty a servery.

Odkazy

Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
312902Vytvoření komponenty obsluhované .NET v aplikaci Visual Basic .NET

Vlastnosti

ID článku: 316627 - Poslední aktualizace: 28. února 2014 - Revize: 2.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft .NET Framework Service Pack 2
  • Microsoft Enterprise Services (included with the .NET Framework 1.1)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Klíčová slova: 
kbnosurvey kbarchive kbmt kbcompiler kbhowtomaster kbsqlclient kbsystemdata KB316627 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:316627

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