Avatar billede enlize Nybegynder
06. februar 2001 - 10:17 Der er 24 kommentarer og
1 løsning

Kald stored procedure fra ASP

Hej

Hvis jeg har lavet en stored procedure på min SQL server, hvordan kalder jeg den fra en .ASP side?
Avatar billede slash Nybegynder
06. februar 2001 - 10:20 #1
set rsOrder = Server.CreateObject(\"ADODB.Command\")
rsOrder.ActiveConnection = strConn
rsorder.CommandText = \"sp_soeg\"
soegStreng = Request.Form(\"soegestreng\")
soegEmne = Request.Form(\"soegeemne\")
set param = rsorder.CreateParameter(\"soegeStreng\",adVarChar,adParamOutput,len(soegeStreng),soegeStreng)
rsorder.Parameters.Append param
rsorder.Execute
set rsorder.ActiveConnection=nothing
%>

<%
soegeStreng = Request.Form(\"soegestreng\")
soegeEmne = Request.Form(\"soegeemne\")
Set cn = Server.CreateObject(\"ADODB.Connection\")
cn.Open \"dsn\", \"uid\", \"pwd\"
sql = \"sp_soeg \'\"& soegeStreng &\"\', \'\"&soegeEmne&\"\' \"
set rs = cn.Execute(sql)
Avatar billede slash Nybegynder
06. februar 2001 - 10:22 #2
en lille test jeg lavede engang med en søgning.... er sikkert ikke optimalt opbygget, men den viser vel princippet :o)
Avatar billede enlize Nybegynder
06. februar 2001 - 10:27 #3
Hmmm - jeg prøver lige igen.
Min stored procedure ser således ud:

create procedure spTest AS
Select * From Tabel1

Når jeg eksekverer denne i SQL Query analyzer skriver jeg følgende: execute spTest
Og indholdet af tabellen bliver vist.

Hvad skriver jeg i et .ASP dokument?
Avatar billede kasseper Nybegynder
06. februar 2001 - 10:34 #4
du skriver :
Set objCmd = Server.CreateObject(\"ADODB.Command\") \' object oprettes
Set objCmd.ActiveConnection = objConn \' objectets forbindelse sættes til din connection
objCmd.CommandType = adCmdStoredProc \' objectets typer er en stored proc.
objCmd.CommandText = \"spTest\" \' navnet på din proc. sættes her.
Set rs = objCmd.Execute() \' opretter et recordset med resultatet....

Husk at inclu. ADOVBS.inc
Avatar billede slash Nybegynder
06. februar 2001 - 10:42 #5
skal der i sp\'en ikke oxo være en række input variabler, á la: CREATE PROCEDURE [spTest(@ID int, @Type varchar(10))].... bla. bla.

og så i aspkoden skrive følgende:
SQL = \"Execute spTest(\" & ID & \")\"

så returneres resultatet fra sp\'en vel til asp-siden
Avatar billede kasseper Nybegynder
06. februar 2001 - 10:46 #6
Der er altså noget der ikke er som du tror slash...Når man laver parapetre til en stored procedure skal man adde dem sådan her :

objCmd.Parameters.Append objCmd.CreateParameter(\"@ID\",adInteger,adParamInput,4, Session(\"ID\"))objCmd.Parameters.Append objCmd.CreateParameter(\"@Type\",adChar,adParamInput,40, MyType)

Avatar billede kasseper Nybegynder
06. februar 2001 - 10:47 #7
øhhh parapetre...hvad er det ??? parametre selvfølgelig ;)
Avatar billede kasseper Nybegynder
06. februar 2001 - 10:49 #8
fandt lige en side der forklare en del, grundlæggende om Stored procedures...:
http://www.activeserverpages.dk/aspdigital/special/2610/content.htm
Avatar billede stoffer Nybegynder
06. februar 2001 - 10:51 #9
øhm jeg har lavet stored procedures flere gange, og jeg har for det meste brugt slash\'s metode, og det virker fint :)

set rs = oConn.execute(\"Execute spTest \" & ID & \",\" & anden parameter & osv )
Avatar billede enlize Nybegynder
06. februar 2001 - 10:51 #10
Hvad er \"ADOVBS.inc\"  ?
Avatar billede kasseper Nybegynder
06. februar 2001 - 10:53 #11
OK, men det er ikke den oficielle metode....
ADOVBS.inc er den fil der indeholder alle de konstanter du skal bruge når du f.eks. siger adChar i et parameter, så er det en reference til ADOVBS, med alle konstanterne....
filen ligger sikkert i dit wwwroot
Avatar billede kasseper Nybegynder
06. februar 2001 - 10:57 #12
sorry slash, havde ikke læst hele din først kode....
Avatar billede slash Nybegynder
06. februar 2001 - 10:58 #13
>> kasseper: helt ok :)

Det handler jo nok oxo meget om personlige preference hvorledes man konstruerer sin kode..
Avatar billede kasseper Nybegynder
06. februar 2001 - 11:01 #14
Ja, men hvis man gør det i sin Connection execute, bruger man slet ikke de features der er i et command object, som jo er specielt strikket sammen til brug af stored procedures, så jeg kan da kun anbefale denne fremgangsmåde.....Altså med command objectet ;)
Avatar billede slash Nybegynder
06. februar 2001 - 11:11 #15
Følgende funger fint hos mig:
Kode i sp\'en:
CREATE PROCEDURE spTest(@ID int)  AS
SELECT id FROM <tabelnavn> WHERE id = @ID

ASP-kode, der eksekverer sp\'en spTest med parametren id:
id = Request.form(\"id\")
SQL = \"spTest(\"& id &\")\"
Set Conn = CreateObject(\"ADODB.Connection\")
Conn.Open \"dsn\", \"uid\",\"pwd\"
set res = Conn.Execute(SQL)
if n >= 0 then
    a = res.getrows()
    for row = 0 to ubound(a,2)
    id = a(0,row)
    Response.Write id
    next
end if

Eksemplet virker på min testserver....
Avatar billede kasseper Nybegynder
06. februar 2001 - 11:14 #16
Ja det virker, men er altså ikke optimalt. Man BØR bruge command objectet til at kommunikerer til sine stored procedures. Man kan jo altid execute en SQL statement fra connection objectet......
Avatar billede slash Nybegynder
06. februar 2001 - 11:16 #17
har du regnet tidskompleksiteten ud for de 2 eksempler? *LÅLLER*  :-)
Avatar billede kasseper Nybegynder
06. februar 2001 - 11:18 #18
Nej, dog ikke, men jeg har mærket det når jeg eksevkere parameter tunge procedures.....
Avatar billede enlize Nybegynder
06. februar 2001 - 11:18 #19
Jeg har taget eksemplet fra dit link Kasseper. men det virker tilsyneladende ikke.

Her er koden:

Set objConn = Server.CreateObject(\"ADODB.Connection\")
        objConn.Open \"DRIVER=SQL Server;SERVER=10.10.0.8;DATABASE=testing\"
       
        \'set data_recordset = datacmd.execute

        Set cmdUpdate = Server.CreateObject(\"ADODB.Connection\")
        cmdUpdate.ActiveConnection = objConn
        cmdUpdate.CommandText = \"retriveValues\"
        cmdUpdate.Commandtype = adCmdStoredProc
       
        cmdUpdate.execute ,, adExecuteNoRecords

        objConn.Close
        Set objConn = Nothing

Og jeg får følgende fejl:
Microsoft VBScript runtime error \'800a01be\'

Object doesn\'t support named arguments: \'cmdUpdate.ActiveConnection\'

/dev/test/test.asp, line 9
Avatar billede kasseper Nybegynder
06. februar 2001 - 11:19 #20
Set cmdUpdate = Server.CreateObject(\"ADODB.Connection\")

skal være

Set cmdUpdate = Server.CreateObject(\"ADODB.Command\")
       
Avatar billede enlize Nybegynder
06. februar 2001 - 11:21 #21
Kanon - hvordan udskriver man så SP\'en
Avatar billede kasseper Nybegynder
06. februar 2001 - 11:22 #22
altså resultatet ?????
Avatar billede enlize Nybegynder
06. februar 2001 - 11:23 #23
Yes
Avatar billede kasseper Nybegynder
06. februar 2001 - 11:25 #24
Der skal du oprette et recordset,
set rs = cmdUpdate.execute
while NOT rs.EOF
response.write rs(\"felt1\") & \"<br>\"
rs.movenext
wend

felt1 skal du så bare erstatte med dine feltnavne, ganske som man plejer at gøre
Avatar billede enlize Nybegynder
06. februar 2001 - 11:27 #25
Selvfølgelig - mange tak for hjælpen
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
Kurser inden for grundlæggende programmering

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