Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

prepared query og funktioner (Stig Johansens funktion :-)

0 views
Skip to first unread message

Leif Neland

unread,
Jan 11, 2012, 8:42:16 AM1/11/12
to
Classic asp, sqlserver 2008R2, Stig Johansens parameterized query-funktion.

Jeg har et problem med at kalde en
Jeg har en user-defined sql-funktion, der returnerer en tabel:
check_gavekort(@id int,@pin) returns table

F.ex. check_gavekort(123,456)

Den naive metode virker:
set rs=conn.execute("select * from
dbo.gavekort_check("&request.form("Kortnummer")&","&request.form("Pin")&")")

Men jeg ville gerne bruge parametized queries.
set rs=st_query(conn,"select * from
dbo.gavekort_check(?,?)",array(request.form("Kortnummer"),request.form("Pin")),2)
Det fejler imidlertid i denne linie:
cmd(Counter).type = 12 ' adVariant
med fejlen "0x80004005 Syntax error or access violation"

Derimod fungerer

set rs=st_query(conn,"select * from gavekort where id=? and
pin=?",array(request.form("Kortnummer"),request.form("Pin")),2)

Så hvorledes får jeg så proppet mine variable ind i funktionen?


Jeg bruger Stig Johansens funktion:
Function st_query(connection, SQL, Parameters,Paramcount)
if Paramcount = -1 then Paramcount = uBound(Parameters) + 1
Dim cmd, Counter , isSelect , RowsAffected
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = connection
cmd.CommandType = 1 ' adCmdText
cmd.CommandText = SQL
IF lcase(left(ltrim(SQL),6)) = "select" then
isSelect = true
else
isSelect = false
end if

For Counter = 0 To Paramcount - 1
cmd(Counter).type = 12 ' adVariant
cmd(Counter).value = Parameters(Counter)
Next
if isSelect then
Set st_query = cmd.Execute
else
cmd.Execute RowsAffected,,-1 ' adOptionUnspecified
if Err <> 0 then RowsAffected = -1
st_query = RowsAffected
on error goto 0
end if
End Function


Leif Neland

unread,
Jan 11, 2012, 9:40:59 AM1/11/12
to

"Leif Neland" <le...@neland.dk> skrev i en meddelelse
news:4f0d91b8$0$282$1472...@news.sunsite.dk...
> Classic asp, sqlserver 2008R2, Stig Johansens parameterized
> query-funktion.
>
> Jeg har et problem med at kalde en
> Jeg har en user-defined sql-funktion, der returnerer en tabel:
> check_gavekort(@id int,@pin) returns table
>
> Men jeg ville gerne bruge parametized queries.
> set rs=st_query(conn,"select * from
> dbo.gavekort_check(?,?)",array(request.form("Kortnummer"),request.form("Pin")),2)
> Det fejler imidlertid i denne linie:
> cmd(Counter).type = 12 ' adVariant
> med fejlen "0x80004005 Syntax error or access violation"

Der bliver åbenbart ikke lavet nogle parametre ud af ?'erne, når queryet er
en funktion, i modsætning til når det bare er en almindelig sql-sætning.
Så ved at lave løkken, der sætter parametrene om, lykkedes det:

For Counter = 0 To Paramcount - 1
' IKKE
'cmd(Counter).value = Parameters(Counter)
'cmd(Counter).type = Paramtypes(Counter)
' MEN
cmd.parameters.Append
cmd.CreateParameter("",Paramtypes(Counter),adParamInput,,Parameters(Counter))
Next


Stig Johansen

unread,
Jan 17, 2012, 5:17:53 AM1/17/12
to
Leif Neland wrote:

>> set rs=st_query(conn,"select * from
>>
dbo.gavekort_check(?,?)",array(request.form("Kortnummer"),request.form("Pin")),2)
>
> Der bliver åbenbart ikke lavet nogle parametre ud af ?'erne, når queryet

Jeg er rimelig sikker på jeg har haft nogle 'småproblemer', når der ikke har
været adskillelse mellem ?-tegnene.

Husker ikke de præcise omstændigheder, men de problemer jeg har haft blev
løst med en 'blank-' mellem tegnene.

Jeg mener også det var noget ged hvis sætniongen slutterde med ?, så der
satte jeg også en ekstra blank ind.

--
Med venlig hilsen
Stig Johansen
0 new messages