Avatar billede niceday Nybegynder
30. december 2002 - 06:05 Der er 6 kommentarer og
2 løsninger

Hvorfor Stored Procedures - og hvilket kald er bedst?

Jeg er temmelig grøn hvad angår stored procedures og skal derfor høre hvad der er så specielt ved disse fremfor et normalt sql-kald?

For at andet undre det mig at der findes flere måder at anvende stored procedures på. Hvad er f.eks. bedst af nedenstående og hvad er forskellen?

(de udfører jo alle samme arbejde)


----= Eksempel 1 =----

sql = "User_insert"
Set RS = Server.CreateObject("ADODB.Command")
with RS
.ActiveConnection = conn
.CommandText = sql
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@Username",adChar, AdParamInput, 50, Username)
.Parameters.Append .CreateParameter("@Password",adChar, AdParamInput, 50, Password)
.Parameters.Append .CreateParameter("@Age",adInteger, AdParamInput, , Age)
.Execute lngRecs, , adExecuteNoRecords
end with
set RS = nothing
Conn.Close
Set Conn = Nothing

----= Eksempel 2 =----

sql = "User_insert"
sql = sql&" "&username&","&password&","&age
set RS = Server.CreateObject("ADODB.Recordset")
RS.Open sql,conn
Avatar billede arne_v Ekspert
30. december 2002 - 09:48 #1
Fordelene ved SP kald er:

1)  De kan precompiles på SQLServeren så de er meget hurtige at eksekvere.

2)  Du kan få udført business logik på serveren og derved minimere
    den datamængde der skal flytte sover nettet.

3)  Du kan bruge det til at forbedre security fordi du akn give
    brugere adgang til en SP uden at give dem adgang til de tabeller
    der ligger bagved.

[jeg kan ikke kommentere på de 2 kode snippets - det ligner noget
ASP eller VB]
Avatar billede janus_007 Nybegynder
30. december 2002 - 10:22 #2
Udover det som arne v har svaret...

Den første er kald til stored procedure vha. parameter, den anden er et hurtigkald!
Et parameteriseret sp-kald er godt i de tilfælde hvor gentagne kald kræves, idet ADO vil spørge direkte til datatypen og hvilke parameter der findes. Derudover kan der også anvendes output parameter.
Hurtig-kalds metoden er den nemmeste måde at gøre det på, men det har en pris, bla. lidt langsommere ved gentagne kald og sidst men ikke mindst, du kan ikke specificere outputparameter!

Hint: I eksempel 2 åbner du et recordset, det er der ingen grund til ! Brug kan recordseti de tilfælde hvor du forventer et rs tilbage ellers altid execute! hmm ja og så har du brugt RS som benævnelse for dit command object, der ville jeg nok kalde det objCmd (men det er bare navngivning)
Avatar billede ocp Nybegynder
30. december 2002 - 15:49 #3
Der er en tredie mulighed:

conn.Execute sql

Den kan også sættes til ikke at benytte recordsets (vha parametre).
Avatar billede janus_007 Nybegynder
30. december 2002 - 16:25 #4
Jaja, læs nu mit svar. Har jeg ikke skrevet execute ??
Avatar billede ocp Nybegynder
30. december 2002 - 16:44 #5
Nå ja....
Avatar billede niceday Nybegynder
30. december 2002 - 22:12 #6
janus >

"Et parameteriseret sp-kald er godt i de tilfælde hvor gentagne kald kræves"

Mener du hermed at en side, som kaldes 5000 gange om dagen vil kunne drage nytte af et sp-kald? Ville det være en dårlig ide at lave alle kald som eksempel 1?
Avatar billede arne_v Ekspert
30. december 2002 - 22:36 #7
5000 kald om dagen betyder ihvertfald at en SP er en god ide !
Avatar billede niceday Nybegynder
31. december 2002 - 00:05 #8
Tak for godt svar :-)

Godt nytår!
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