Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Transaktion i flera metoder

Postades av 2003-10-27 09:24:35 - Mathias Thinsz, i forum asp.net generellt, Tråden har 5 Kommentarer och lästs av 557 personer

Jag har en massa olika metodanrop och det i dessa sker en massa databasjox. Om jag vill köra alla dessa i en transaktion, ska jag då skapa denna transaktion innan alla metodanropen och även köra begin transaction, och skriva om metoderna så att de tar transaktionen som parameter?

Nåt sånt här alltså:

<code>
Public Sub DoSomething
Dim oConnection As New OleDbConnection(...)
Dim oTransaction As OleDbTransaction

oConnection.Open()
oTransaction = oConnection.BeginTransaction

Try
my1stObj.Method(param1, param2, oTransaction)
my2ndObj.Method(param3, param4, oTransaction)
my3rdObj.Method(param1, param4, oTransaction)
Catch ex As Exception
oTransaction.Rollback()
Throw New Exception("Fel fel fel!!!", ex)
End Try

oTransaction.Commit()
End Sub
</code>

Jag vill ju att om my3rdObj.Method(...) smäller, så ska det som skedde i my1stObj.Method(...) och my2ndObj.Method(...) göras ogjort.

/M


Svara

Sv: Transaktion i flera metoder

Postades av 2003-10-27 09:45:40 - Mattias Lindberg

Jag tycker det ser ok ut. Rätt användning av try-catch för att säkerställa att ändringar rullas tillbaka vid eventuella fel.

/Mattias


Svara

Sv: Transaktion i flera metoder

Postades av 2003-10-28 18:47:40 - Mathias Thinsz

Det är så här man är tvungen att göra alltså?


Svara

Sv: Transaktion i flera metoder

Postades av 2003-10-28 22:19:49 - Mattias Lindberg

Tja, mer eller mindre. Jag missade tyvärr att du nog måste skicka med connection också eftersom om du tex jobbar med en OledbCommand så måste connection och transaction på dessa båda hänga samman.

Jag skulle nog också fundera på att flytta in oTransaction.Commit in i try-blocket. Det blir tydligare var den hör och ingen risk att man i framtiden hanterar felet i catch-blocket och sedan exekverar Commit trots att det gick fel...

Just eftersom detta lätt kan bli lite krångligt, skicka med connection och transaction hit och dit, så är det ju inte helt ovanligt att använda COM+ för att lösa denna sorts problem. Varje objekt/klass som du anropar skulle i sådana stödja transaktionshantering genom att använda System.EnterpriseServices.ServicedComponent, kolla med på denna klass och namespace för att se vad du kan göra. Vad som sker är att en DTC transaktion startas som sköter hanteringen av transaktionen åt dig, du måste däremot anropa SetComplete eller SetAbort på ContextUtil klassen.

/Mattias


Svara

Sv: Transaktion i flera metoder

Postades av 2003-11-21 11:15:12 - Mathias Thinsz

I VB6 skrev jag komponenter en gång i tiden där man angav om transaktioner var Supported, Required, Requires New osv. Hur gör man detta i DotNet? Är det vad du försöker förklara, men som jag uppenbarligen inte kopplar? ;)


Svara

Sv: Transaktion i flera metoder

Postades av 2003-11-21 11:33:57 - Fredrik Normén

Här du ett litet ex på hur du kan skriva en enkel klass som använder Enterprise Services:

<code>
Imports System.Reflection
Imports System
Imports System.EnterpriseServices

<Assembly: ApplicationName("MyServicedComponents")>
<Assembly: AssemblyDescription("This app contains serviced components")>
<Assembly: ApplicationActivation(ActivationOption.Server)>
<Assembly: AssemblyKeyFile("MyKey.snk")>

<Transaction(TransactionOption.Supported)> _
Public Class Account
Inherits System.EnterpriseServices.ServicedComponent

<AutoComplete()> _
Public Sub Debit()
End Sub

<AutoComplete()> _
Public Sub Credit()
End Sub

End Class
</code>

<AutoComplete> kommer att se till så Commit eller RollBack anropas beroende på om allt gick bra eller inte. Om du vill sköta Commiten och Aboirt själv så kan du tabort <AutoComplete()> och använda dig av ContextUtil.SetComplete och ContextUtil.SetAbort.

Du kan använda dig av RegSvcs.exe för att registrera komponenten i Componenet Services eller själv lägga till den i Componentet services. Det går även med lite enkel hack att få komponenten att installera sig själv i Component Services när den körs för första gången. Du hittar allt detta i Framework SDK.

OBS! Tänk på att skapa en nyckel som du signarerar din assemlby med. En nyckel skapar du med "sn -k":

sn -k MyKey.snk

Se även till att skriva in sökvägen till din nyckel i AssemblyKeyFile (Se koden ovan):

<Assembly: AssemblyKeyFile("MyKey.snk")>

Om du inte använder Enterprise services så kan du göra som du gjort i din kod. Transaction objektet har en property .Connection som innehåller den connection som är kopplad till transactionen så du behöver inte skicka med connection till metoderna. Det räcker med transaction objektet.

/Fredrik Normén NSQUARED2
http://www.nsquared2.net


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 159
27 952
271 704
1 049
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies