🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: dk.edb.internet.webdesign.serverside.asp
3 messages
3 total messages Started by Leif Neland Wed, 11 Jan 2012 13:42
prepared query og funktioner (Stig Johansens funktion :-)
#314
Author: Leif Neland
Date: Wed, 11 Jan 2012 13:42
54 lines
2869 bytes
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 
Re: prepared query og funktioner (Stig Johansens funktion :-)
#315
Author: Leif Neland
Date: Wed, 11 Jan 2012 14:40
29 lines
2335 bytes
"Leif Neland" <leif@neland.dk> skrev i en meddelelse 
news:4f0d91b8$0$282$14726298@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
Re: prepared query og funktioner (Stig Johansens funktion :-)
#325
Author: Stig Johansen
Date: Tue, 17 Jan 2012 10:17
20 lines
1811 bytes
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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads