webForumDet fria alternativet

Command/transaction

5 svar · 340 visningar · startad av Andreas L

Andreas LMedlem sedan sep. 2000215 inlägg
#1

Hej!

Jag behöver köra en updatesats genom en loop, och vill därför använda någon transaction ifall det skulle bli fel.

Har för tillfället kört updaten med Commandobjekt, i stället för att köra med execute-metoden i Connectionobjektet.

Men kan jag köra med transaction på något enkelt sätt när jag använder commandobjektet, eller behöver jag byta till connection-objektet för detta?
Jag har använt command-objektet eftersom jag har förstått att det skall vara snabbare?

/Tack på förhand!

emissionMedlem sedan dec. 19996 721 inlägg
#2

Kör Command-objektet med en aktiv Connection.

Andreas LMedlem sedan sep. 2000215 inlägg
#3

Hej Emission!

Du säger att jag skall köra med en active connection, så här ser koden ut idag....

set Com1 = Server.CreateObject("ADODB.Command")
Com1.ActiveConnection = kopplingssträng
'påbörja transaktion?
for i = 1 to n_times

Com1.CommandText = "UPDATE blablablabl..blabla..."
Com1.CommandType = 1
Com1.CommandTimeout = 0
Com1.Prepared = True
Com1.Execute()

Next
'kontrollera felnummer..
'fullfölja eller avbryta transaktion..

Jag förstår dock inte riktigt hur du menar?

Hur anger jag att transaktionen skall på börjas och avslutas? Jag har inte sett några sådana egenskaper för commandobjektet.
Hur kontrolleras om något fel(felnummer) uppstått ex.? Så att jag då kan informera användaren.
Jag har inte tidigare använt mig av commandobjektet så här, så jag är ganska vilsen... Jag kanske har fattat helt fel?

Är dock supertacksam för all hjälp! :)

emissionMedlem sedan dec. 19996 721 inlägg
#4

Med en aktiv connection menar jag att du ska använda en ADODB.Connection som ActiveConnection, i stället för att bara skicka in kopplingssträngen. Du ska alltså använda både Connection och Command.

Andreas LMedlem sedan sep. 2000215 inlägg
#5

Tack för hjälpen!
följande...

[1]
set myconn = Server.CreateObject("adodb.connection")
myconn.open databaskoppling
insert

sub insert
on error resume next
myconn.begintrans

			set com1 = Server.CreateObject("ADODB.Command")
			com1.ActiveConnection = myconn
	for i = 1 to 10
	
			com1.CommandText = "INSERT INTO t1 (invarde) VALUES (" & i & ")"
			com1.CommandType = 1
			com1.CommandTimeout = 0
			com1.Prepared = True
			com1.Execute()
			if err.number <> 0 then
			felsub
			exit sub 'avsluta subrutinen om fel inträffar
			end if
	next
			myconn.committrans 'om alla operationer lyckas...
end sub

sub felsub
response.Write(err.number)
	myconn.rollbacktrans
'ev. operationer
end sub[/1]

...fungerade hur fint som helst! :bire

emissionMedlem sedan dec. 19996 721 inlägg
#6

Toppen! Kom ihåg att stänga databaskopplingen, såväl efter Commit som efter Rollback.

/emission

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)