Avatar billede dehdar Nybegynder
15. august 2009 - 12:59 Der er 11 kommentarer og
2 løsninger

Transaktioner

Hej, jeg har en database, hvor mit DAL består af en række tableadapter funktioner.

For at sikre min database mod samtidighedsproblemer vil jeg starte, slutte og lave rollbacks på mine transaktioner. I den anledning har jeg 4 spørgsmål.

1. Hvordan fortæller jeg databasen at nu starter jeg en transaktion? Er det blot ved at tilføje "BEGIN TRANSACTION" i toppen af hver funktion (efterfulgt af en masse SQL kode)?

2. Hvordan slutter jeg min transaktion? Er det blot ved at tilføje "COMMIT" i enden af min funktioner?

3. Hvordan/hvor identificerer jeg, at to transaktioner starter på den samme query?

4. Hvordan/hvor laver jeg rollbacks?

Jeg koder forresten i MS SQL.
Avatar billede Syska Mester
15. august 2009 - 13:05 #1
Har du læst på msdn ?
http://msdn.microsoft.com/en-us/library/ms188929.aspx

Der står det hele ... og flere reference i bunden af siden.

Der står alt hvad du skal vide ... og så er det bare at begynde og lege og se om det så reelt set også virker ...

Sådan gjorde jeg da jeg skulle bruge det ... og det eneste man får erfaring af er "hands on experience"

// ouT
Avatar billede dehdar Nybegynder
15. august 2009 - 13:24 #2
Jo... jeg synes det står ret kryptisk og jeg har svært ved at gennemskue deres eksempler... Hvis du har et andet link, så må du meget gerne dele det.
Avatar billede dehdar Nybegynder
15. august 2009 - 13:35 #3
Avatar billede Syska Mester
15. august 2009 - 14:05 #4
CREATE TABLE [dbo].[TransTest](
    [id] [int] NOT NULL,
CONSTRAINT [PK_TransTest] PRIMARY KEY CLUSTERED
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

BEGIN TRANSACTION;

BEGIN TRY
    INSERT INTO TransTest ( id ) VALUES ( 12 );
    INSERT INTO TransTest ( id ) VALUES ( 13 );
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;



Og så laver du inden det lige insert i den table så id 12 er der ... men 13 ikke er ... så kan du se at det hele bliver rollback.

// ouT
Avatar billede dehdar Nybegynder
15. august 2009 - 15:26 #5
Af de to artikler jeg har læst, ser fremgangsmåden ud til at være en helt anden :S
Avatar billede Syska Mester
15. august 2009 - 15:33 #6
Alle veje fører til Rom :-)

Det var lidt jeg saksede ud fra MSDN for også lige at genopfriske mit eget :-)

Bruger normal Transactions fra .NET i mine apps
Avatar billede arne_v Ekspert
15. august 2009 - 20:06 #7
De to artikler styrer også transaktioner fra .NET og ikke i eksplicit SQL.

Efter min mening er det mest relevante sidste halvdel af den anden artikel: brug af TransactionScope.
Avatar billede Syska Mester
15. august 2009 - 20:12 #8
Nu skriver han jo at han vil have det i SQL ... om end han nok også bruger .NET :-)

// ouT
Avatar billede arne_v Ekspert
15. august 2009 - 20:21 #9
Jo men både table adapters og de to links er .NET kode.

Jeg har svært ved at se hvordan man får eksplicit SQL og table adapters til at virke fornuftigt sammen.
Avatar billede dehdar Nybegynder
15. august 2009 - 22:03 #10
Aha! Så jeg behøver faktisk slet ikke at røre i min SQL kode for at styre transaktions? Tak for det. Grunden til jeg spørger som jeg gør, er at jeg ikke har prøvet det før, så jeg skulle lige være sikker. I er begge velkommen til at smide et svar.
Avatar billede arne_v Ekspert
15. august 2009 - 22:56 #11
Ikke nok med at du ikke bhøver - det er langt det bedste (i denne situation).
Avatar billede arne_v Ekspert
15. august 2009 - 22:57 #12
og et svar fra mig
Avatar billede Syska Mester
15. august 2009 - 23:00 #13
Klart i .NET

Et kæmpe arbejde at styre i SQL iforhold til .NET efter min mening ... :-)

og svar

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester