För att citera någon annans guide: Vid faktiskt utvecklingsarbete, kör en händelse och anropa sedan ett annat gränssnitt för att infoga data, om det finns ett undantag i bearbetningslogiken blir den tidigare infogade datan skräpdata, Det vi vill är att kunna definiera hela metoden som en transaktion, och klassen TransactionScope erbjuder en enkel metod som gör att du slipper interagera med själva transaktionen. att markera ett kodblock som deltagande i en transaktion. Objektet TransactionScope skapar en transaktion och sätter transaktionen till Current-egenskapen för Transaction-klassen.
1. Fördelar med TransactionScope 1. Det är mer bekvämt att använda. TransactionScope kan implementera implicita transaktioner, så att du kan skriva dataåtkomstlagre-kod utan att ta hänsyn till transaktioner, men kontrollera transaktioner på affärsnivån. 2. Distribuerade transaktioner kan implementeras, såsom databasöverskridande eller MSMQ.
2. Nackdelar med TransaktionScope 1. Kostnadsprestandan är inte hög. Till exempel kontrollerar du bara transaktionerna för ett bibliotek i "Scope". Att använda "TransactionScope" är lite slöseri. 2. Under normala omständigheter, så länge du använder "TransactionScope", behöver du konfigurera MSDTC, installera en brandvägg och öppna port 139. Denna port kan inte ändras
3. Om du måste använda distribuerade transaktioner måste du tänka på det 1. Måste denna operation ingå i transaktionen? Om detta steg inte slutförs eller misslyckas, är det värt att rulla tillbaka hela transaktionen? Finns det inga eleganta kompensations- eller feltoleransåtgärder? 2. Hur många punkter involverar distribuerade transaktioner? Måste ha en lång rad realtidsoperationer? Kan du inte effektivisera vissa punkter genom notifikationsoperationer? 3. Efter att ha initierat en distribuerad transaktion, utförde du transaktionsoberoende operationer, även om dessa operationer inte var transaktionsrelaterade? (t.ex. läsa data, beräkna, vänta på att användaren ska returnera ett meddelande, vänta på samtalsretur från andra moduler, etc.) 4. Du räknade väl inte med några läsoperationer i transaktionen? Detta är ett enkelt misstag att göra när du använder en select-operation i transaktionen. 5. Vissa steg i din operation kan utföras efter att alla operationer är slutförda. Denna typ av operation har tydliga notifikationsegenskaper. Notifikationsoperationer säger, jag ger dig en notis, och jag garanterar att den når dig; Du måste ta emot detta meddelande och se till att det behandlas, men du behöver inte hantera det så fort jag meddelar dig. Denna operation kan uppenbarligen göras med en annan uppgift.
4. Var uppmärksam på följande punkter när du använder distribuerade transaktioner 1: Se till att maskinen som deltar i transaktionen har aktiverat distribuerat transaktionsstöd. 2: Om datorn har brandväggen aktiverad måste du sätta msdtc-processen som ett undantag. 3: Maskinen som deltar i transaktionen kan inte korsa domänen (om den är domänöverskridande har Microsoft för närvarande ingen exakt lösning); 4: Använd distribuerade transaktioner endast när du har flera databaser, om det är samma databas är det bäst att använda SqlTransaction. 1. Lägg till referensen System.Transactions först (du behöver lägga till Net-assemblyn)
Koden på C#-anropet är följande:
Adressen till bloggarna som förklarar denna distribuerade transaktionsklass är mycket tydlig:http://www.cnblogs.com/artech/archive/2010/01/31/1660356.html
2. Sätt konfigurationen av webbservern och SQL-serverns miljö
Kontrollpanel - > System & säkerhet - > Hanteringsverktyg - > komponenttjänster (Detta krävs för både WEB- och SQL-servrar)
Kontrollpanel - > System & Säkerhet - > Hanteringsverktyg - > Tjänster
(Detta krävs för både WEB- och SQL-servrar)
Kontrollpanel - > System & Säkerhet - > Windows-brandvägg
(Detta krävs för både WEB- och SQL-servrar)
3. MSSQL-konfiguration
För serveranslutningar, högerklicka – > egenskaper
4. Konfigurera värdar (konfigurera endast WEBB-servern, annars konfigurera den även på SQL-servern)
C:\Windows\System32\drivers\etc hosts-fil, som öppnas med Notepad (SQL-serverinformation måste konfigureras i Hosts-filen på WEB-servern) (Om testet misslyckas, konfigurera informationen om webbservern i Hosts-filen på SQL-servern)
|