vilket inte är speciellt bra om man kör flera recordset på samma sida. Blir en hel del overhead att öppna och stänga databasen för varje recordset du kör.
Jag skulle säga precis tvätom. Öppna din databas koppling så sent som möjligt och stäng den så sent som möjligt. Alltså är de 2 funktionern alldeles utmärkta.
Anledningen är att du inte öppnar och stänger din databaskoppling varje gång utan att du istället hämtar och lämnar en öppen koppling från kopplingspoolen (konstigt ord).
Så här fungerar det. Man skall (alltid) ha något som kallas för connectionpooling, vilket betyder att du har ett antal öppna kopplingar till din databas (default brukar vara 5) som ligger och väntar på att användas. När du sedan öppnar en databaskoppling så hämtas en ledig koppling från poolen och du slipper overheaden att öppna databasen.
Detta betyder också att man skall lämna tillbaks den så fort man är färdig med den så att någon annan kan använda den. Eftersom du (oftas) bara har 5 så betyder det att om det kommer en 6 person och vill ha en koppling samtidigt som de 5 andra är upptagna så måste en ny koppling skapas till databasen (det tar tid).
Nu kan man tycka det spelar ingen roll om jag ändå bara gör så här:
1. Öppna databaskoppling
2. hämta data
3. skriv ut data
4. hämta ny data
5. skriv ut data
6. stäng koppling
istället för
1. Öppna databaskoppling
2. hämta data
3. skriv ut data
4. stäng koppling
5. Öppna koppling
6. hämta ny data
7. skriv ut data
8. stäng koppling
Problemet är att det inte är du som bestämmer när din kod skall köras ut det är trådhanteringen i IIS, vilket gör att i det översta exemplet mellan punkt 3 och 4, så kanske den tråd som exekverar din sida lämnar ifrån sig exekveringen till en annan tråd. Du har då en öppen databaskoppling som du inte gör något med. Vilket betyder att du har färre lediga kopplingar i din pool. Jämfört med om tråden bryts mellan 4 och 5 i exemplet nedan, då har man redan lämnat tillbaka kopplingen till poolen.
ovanstående exempel är extremfallet eftersom trådexkveringen kanske bryts mellan 5 och 6 i nedre exemplet och då är ju kopplingen ändå upptagen. Men framför allt så skall man släppa sin databaskoppling så fort man inte gör något med den, speciellt om man sysslar med annan tung processkod (typ loopar och andra beräkningar) som inte har med databasen att göra.
Det är bland annat därför som GetRows() är bra för siter med många besökare, eftersom du då kan lämna tillbaka databaskopplingen innan du loopar igenom din array med data.
- M