webForumDet fria alternativet

Stängs kopplingen?

ASP

15 svar · 324 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Frågan#1

Stängs kopplingen och recordsetet nedan?

Set rsFoo = objConn.Execute("SELECT * FROM foo")

If rsFoo.EOF Then
	...
Else
	Response.Clear
	Response.Redirect "start.asp"
End If
[b]rsLogin.Close : Set rsLogin = Nothing
objConn.Close : Set objConn = Nothing[/b]

Eller måste jag ha en stängning efter varje villkor?

Set rsFoo = objConn.Execute("SELECT * FROM foo")

If rsFoo.EOF Then
	[b]rsLogin.Close : Set rsLogin = Nothing
	objConn.Close : Set objConn = Nothing[/b]
Else
	[b]rsLogin.Close : Set rsLogin = Nothing
	objConn.Close : Set objConn = Nothing[/b]
	Response.Clear
	Response.Redirect "start.asp"
End If
Medlem sedan juni 200032 967 inlägg
#2

Ingenting efter response.redirect utförs, jag föreslår att du flyttar din redirect till efter det att du stängt och förstört objekt.

Mvh,

Medlem sedan feb. 200112 078 inlägg
#3

Eftersom 'response.buffer = true' är standard i ASP 3.0, så antar jag att den översta modellen fungerar under dessa förutsättningar.

Någon som vet? Jag är lite ovässad på det där.

Medlem sedan feb. 200112 078 inlägg
#4

@nders? Vad säger du? :)

Medlem sedan juni 200032 967 inlägg
#5

Jag vill påstå att det inte spelar någon som helst roll om response.buffer är true eller false. Efter redirect utförs ingenting.

Men, jag kan ju ha fel, jag vet inte detta, men rent logiskt borde det vara så här det ligger till.

Får väl ta det som uppgift att kolla upp...

Mvh,

Medlem sedan feb. 200112 078 inlägg
#6

Jag vet som sagt inte, men jag skulle nog vara beredd på att satsa ett inlägg eller två på att response.buffer spelar roll där, även om det verkar suspekt.

Jag har nämligen för mig att jag testat något liknande.

Medlem sedan juni 200032 967 inlägg
#7

Response.Buffer = true gör ju att allt som ska skickas till läsaren buffras, och skickas i ett paket när sidan är färdigprocessad. Jag har svårt att tänka mig att den skulle innebära att script som inte ska köras verkligen körs.

DevGuru skrev:

The Redirect method stops processing the current script and attempts to connect the client to a different URL.

Jag vet inte jag, men jag brukar lita på DevGuru. Jag söker mer info. :)

Man kan ju alltid prova, om man har tid och ork, genom att slänga in någon annan kod efter en redirect, exempelvis kod som skriver till en tabell i en databas.

Jag har tyvärr inte tid att testa nu.

Mvh

Medlem sedan sep. 20026 425 inlägg
#8

Om man har många samtida anslutningar på en sajt så kanske det är bäst att göra som du gör i det andra alternativet - sidan som exekveras kör några rader kod mindre. Annars tycker jag att du ska stänga anslutningen innan du skickar vidare användaren till start.asp.
Kort skrivet: det andra alternativet är att föredra.

Om du jagar prestanda och vill optimera så ska du heller inte plocka ut allt från databasen med *, utan välj de fält du har nytta av.

/r att döma av @nders senaste inlägg så ska man väl vara på den säkra sidan också om man inte vet - kör det andra alternativet till dess att du får bättre kod presenterad för dig.

Medlem sedan feb. 200112 078 inlägg
#9

http://msdn.microsoft.com/library/en-us/iisref/htm/sendingcontenttothebrowser.asp?frame=true#buffcnt

MSDN skrev:

You could also use Response.Buffer to prevent the Web server from returning the HTTP header before a script can modify the header. Certain properties and methods, such as Response.Expires and Response.Redirect, modify the HTTP header.

If the Buffer property in a script is set to TRUE without also calling the Flush method to immediately send buffered content to the browser, the server will maintain Keep-Alive requests made by the client. The benefit of writing scripts in this manner is that server performance is improved because the server does not have to create a new connection for each client request (assuming that the server, client, and any proxy servers all support Keep-Alive requests). However, a potential drawback to this approach is that buffering prevents the server's response from being sent to the user until the server has finished processing the entire script. For long or complicated scripts, users could experience long wait times before seeing the page.

Jag vet inte riktigt hur jag skall tolkat det där, det verkade lite luddigt. :l :)

Medlem sedan feb. 200112 078 inlägg
#10

Man skall tydligen använda server.transfer istället, om man vill göra på det sättet;

<HTML>
  <BODY>
  .
  .
  .
  <%
    If Request("CustomerStatus") = "" Then
      Response.Clear
      Server.Transfer("/CustomerInfo/Register.asp")
    Else
      Response.Write "Welcome back " & Request("FirstName") & "!"
            .
            .
            .
    End If
  %>
  </BODY>
</HTML>
Medlem sedan aug. 20003 575 inlägg
#11

Det har inget med själva koden på sidan att göra.

Detta borde man kunna testa med.

Dim intTal1, intTal2, intResultat
intTal1 = 0
intTal2 = 1
Response.Redirect "andrasidan.asp"
intResultat = intTal1/intTal2

om det blir error i koden så går den igenom hela sidan.

Annars inte.

Har svårt att tro att Response.Buffer = True har något med vilken kod som exeveras.

Det koden säger ovan är ju som anders säger att allt skickas i samma paket.

Medlem sedan sep. 20026 425 inlägg
#12

OveRRidE skrev:

Man skall tydligen använda server.transfer istället, om man vill göra på det sättet;

<HTML>
  <BODY>
  .
  .
  .
  <%
    If Request("CustomerStatus") = "" Then
      Response.Clear
      Server.Transfer("/CustomerInfo/Register.asp")
    Else
      Response.Write "Welcome back " & Request("FirstName") & "!"
            .
            .
            .
    End If
  %>
  </BODY>
</HTML>

Mmm. Server.Transfer är snabbare än Response.Redirect, men Response-metoden är mer använd än Server-metoden, troligtvis pga att det är så många som utvecklar på PWS och inte IIS.
Här kan jag smyga in lite info till: Server.Execute("sida.asp") är snabbare än <!--#include file="sida.asp"-->. Om man använder querystrings tillsammans med inkluderingar som exempelvis jag och Palleman har gjort, och kör med SSI, så inkluderas en massa filer om man kodat dumt.

Medlem sedan aug. 20003 575 inlägg
#13

Med Transfer får man ju med alla variabler.

Eller har jag fel ?

Medlem sedan sep. 20026 425 inlägg
#14

Nickemannen skrev:

Med Transfer får man ju med alla variabler.

Eller har jag fel ?

Det har jag i och för sig ingen aning om. Är det så, någon?

/r förresten, vilka variabler..?

Medlem sedan aug. 20003 575 inlägg
#15

Request.Querystring
Och
Request.Form

har jag för mig man har kvar från förra sidan eftersom byttet av sidan görs på serven

Och inte hos klienten som med response.redirect

Medlem sedan sep. 20026 425 inlägg
#16

Aha! Det var en liten petitess som kan vara bra att komma ihåg.

254 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)