[ASP] parametrized queries

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Ik ben dus bezig met een 'lichtkrant' in asp.

De bedoeling is dat studenten, docenten etc. meldingen op de 'lichkrant'
kunnen zetten in de vorm van een (minimale) website.

Er moet een formulier zijn waar gebruikers de informatie invullen
en vervolgens moet deze opgeslagen worden in een acces db.

Nou heb ik een probleem met de sql querie, deze wordt namelijk
mijlenlang, nou werd er geopperd parametrized queries te gebruiken.

Na heel lang zoeken heb ik nog steeds niet gevonden hoe ik dit nou moet
laten werken, de faq hier op GOT is alleen bruikbaar voor .NET users dus
daar kan ik niet al te veel mee gezien er gebruik wordt gemaakt van ASP 3.0.

Ook op internet loop ik telkens vast, het enige wat ik tot nu toe gevonden heb
zijn 12 topics over 'stored queries' hardstikke leuk maar dat is niet wat ik zoek
volgens mij.

Weet iemand hoe ik dat nou moet gaan oplossing te vinden voor deze querie:

Sql = "INSERT INTO bericht (Titel, TitelColor, TitelBgr, BanTop, BanTopPos, BanBot, BanBotPos, Msg, MsgColor, MsgBgr, MsgPos, MsgFont, Img, ImgPos, StartDate, EndDate, FreqDate, Time)" &_
"VALUES (@Titel, @TitelColor, @TitelBgr, @BanTop, @BanTopPos, @BanBot, @BanBotPos, @Msg, @MsgColor, @MsgBgr, @MsgPos, @MsgFont, @Img, @ImgPos, @StartDate, @EndDate, @FreqDate, @Time)"

(waarin @value staat voor Request.Form("value") )

welcome my son, welcome to the machine


  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Waarom niet zo:

"VALUES (" &_

Request.Form("Titel1") & ", " &_
Request.Form("Titel2") & ", " &_
Request.Form("Titel3") & ", " &_
Request.Form("Titel4") & ", " &_
Request.Form("Titel5") & ", " &_

Je hoeft niet de hele query op 1 regel te gooien, en wat maakt het dan uit dat hij zo lang is.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Who is John Galt?


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
André schreef op 06 februari 2004 @ 09:58:
Waarom niet zo:

"VALUES (" &_

Request.Form("Titel1") & ", " &_
Request.Form("Titel2") & ", " &_
Request.Form("Titel3") & ", " &_
Request.Form("Titel4") & ", " &_
Request.Form("Titel5") & ", " &_

Je hoeft niet de hele query op 1 regel te gooien, en wat maakt het dan uit dat hij zo lang is.
ja dat had ik al gedaan, maar weet je hoe gruwelijk lang dat apparaat dan wordt?
Ik kreeg een error op m'n sql insert querie maar dat ding was zo onoverzichtelijk
dat ik gewoon de fout niet meer kon vinden

In dat topic kreeg ik toen als reactie dat ik beter uit kon gaan zoeken hoe
parametrized queries werken dus vandaar ... tevens zou je dan geen
problemen meer hebben met afvangen van ' = en andere vervelende tekens.

welcome my son, welcome to the machine


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
André schreef op 06 februari 2004 @ 09:58:
Waarom niet zo:

"VALUES (" &_

Request.Form("Titel1") & ", " &_
Request.Form("Titel2") & ", " &_
Request.Form("Titel3") & ", " &_
Request.Form("Titel4") & ", " &_
Request.Form("Titel5") & ", " &_

Je hoeft niet de hele query op 1 regel te gooien, en wat maakt het dan uit dat hij zo lang is.
Omdat dat onveilig is.

Je moet ipv @naam placeholders, vraagtekens gebruiken als placeholder in ASP (OleDb) dacht ik:
code:
1
string s = "INSERT INTO tabel (veld1, veld2) VALUES ( ?, ? )


Ik denk dat je op de MSDN wel wat moet vinden.

https://fgheysels.github.io/


  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Onveilig? In welk opzicht is dat onveilig?

  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Thanks!

wat ik dus niet begrijp is ...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'If a SQL statement with question marks is specified, then the
'CommandType is adCmdText.  If a query name is specified, then
'the CommandType is adCmdStoredProc.

objCmd.CommandText = "SampleQuery"
objCmd.CommandType = adCmdStoredProc

'Create the parameter and populate it.

Set objParam = objCmd.CreateParameter("@productid" , adInteger, adParamInput, 0, 0)
objCmd.Parameters.Append objParam

objCmd.Parameters("@productid") = 15  'Return the product with ProductID = 15

'Open and display the Recordset.


je moet dus toch stored procedures gebruiken?!?!

dus eerst in ms Acces je (insert) query aanamaken en die dan aanroepen?

welcome my son, welcome to the machine


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
André schreef op 06 februari 2004 @ 10:07:
[...]

Onveilig? In welk opzicht is dat onveilig?
Op die manier ben je niet bestand tegen SQL injection.
Daarnaast kunnen parametrized queries de performance ook bevorderen, en je hoeft niet alles zelf te escapen of in het goede formaat te zetten.

[rml][ Alg] Safe Code part II - SQL en HTML injection tegengaan[/rml]

[ Voor 33% gewijzigd door whoami op 06-02-2004 10:12 ]

https://fgheysels.github.io/


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
OEPS

verder lezen dan mijn neus lang is:

code:
1
2
To use a SQL statement with question marks as parameter placeholders, use the same sample code but update the CommandText and CommandType properties as in the following example: objCmd.CommandText = "SELECT * FROM Products WHERE ProductID = ?"
objCmd.CommandType = adCmdText


dus sql querie opslaan als CommandText zeg maar .. ok

welcome my son, welcome to the machine


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

intrix schreef op 06 februari 2004 @ 10:08:
[...]
je moet dus toch stored procedures gebruiken?!?!

dus eerst in ms Acces je (insert) query aanamaken en die dan aanroepen?
Goed lezen, er staan 2 voorbeelden, de 1e is met een SP, de 2e niet.

edit:

Goed zo ;)

[ Voor 5% gewijzigd door justmental op 06-02-2004 10:11 ]

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
intrix schreef op 06 februari 2004 @ 10:08:
[...]


Thanks!

wat ik dus niet begrijp is ...


je moet dus toch stored procedures gebruiken?!?!

dus eerst in ms Acces je (insert) query aanamaken en die dan aanroepen?
Nee, je kan het ook met een gewone query doen.

https://fgheysels.github.io/


  • bramseltje
  • Registratie: September 2001
  • Laatst online: 23-05 10:13
microsoft schreef op:
http://support.microsoft....0/1/90.asp&NoWebContent=1

Before you begin, create an Access Query in the Northwind database, called SampleQuery, that is built in SQL view from the following: ...

  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
objCmd.CreateParameter("@bericht_datum" , adVarChar, adParamInput, 0, 0)

objCmd.Parameters.Append objParam
objCmd.Parameters("@bericht_datum") = '2/5/2004'

Ok je maakt dus een nieuwe parameter, vervolgens append je 'm en geef je
'm een waarde .. simpel .. alleen

kan iemand uitleggen hoe dit zit?
objCmd.CreateParameter("@bericht_datum" , adVarChar, adParamInput, 0, 0)

je geeft 'm een naam, een type en dan? .. 0,0 ?????

welcome my son, welcome to the machine


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Kijk eens in de help wat de parameters zijn van die functie.... (msdn)
Waarschijnlijk is het de size en de scale.

[ Voor 24% gewijzigd door whoami op 06-02-2004 10:22 ]

https://fgheysels.github.io/


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
whoami schreef op 06 februari 2004 @ 10:22:
Kijk eens in de help wat de parameters zijn van die functie.... (msdn)
Waarschijnlijk is het de size en de scale.
:) CreateParameter(Name, Type, Direction, Size, Value)

offtopic:
Name
A String representing the name of the Parameter object.

Type
Optional. A Long value specifying the data type of the Parameter object. See the Type property for valid settings.

Direction
Optional. A Long value specifying the type of Parameter object. See the Direction property for valid settings.

Size
Optional. A Long value specifying the maximum length for the parameter value in characters or bytes.

Value
Optional. A Variant specifying the value for the Parameter object.

[ Voor 79% gewijzigd door intrix op 06-02-2004 10:31 ]

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
IK SNAP HET NIET?! 8)7 |:(


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Set objCmd = Server.CreateObject("ADODB.Command")
Set DbConn = Server.CreateObject("Adodb.Connection")

    DbConn.Open strConnect

    objCmd.CommandText = "SELECT * FROM Datum WHERE bericht_datum = ?"
    objCmd.CommandType = adCmdText

Set objParam = objCmd.CreateParameter("@bericht_datum", adDate, adParamInput, 1)

    objCmd.Parameters.Append objParam
    objCmd.Parameters("@bericht_datum") = #2/5/2004#

    DbConn.Execute objCmd

    DbConn.Close


dit is een testje wat ik even aan de praat probeer te krijgen zodat ik
als dit werkt mijn INSERT querie kan gaan maken op basis van deze test...

't probleem zit 'm in de datum:

Type mismatch.
/intrascripts/lichtkrant/tryout.asp, line 30


heb nu al 8 pogingen gedaan maar
uiteraard op verschillende wijze

[ Voor 8% gewijzigd door intrix op 06-02-2004 11:29 ]

welcome my son, welcome to the machine


  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

intrix schreef op 06 februari 2004 @ 11:29:
IK SNAP HET NIET?! 8)7 |:(


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Set objCmd = Server.CreateObject("ADODB.Command")
Set DbConn = Server.CreateObject("Adodb.Connection")

    DbConn.Open strConnect

    objCmd.CommandText = "SELECT * FROM Datum WHERE bericht_datum = ?"
    objCmd.CommandType = adCmdText

Set objParam = objCmd.CreateParameter("@bericht_datum", adDate, adParamInput, 1)

    objCmd.Parameters.Append objParam
    objCmd.Parameters("@bericht_datum") = #2/5/2004#

    DbConn.Execute objCmd

    DbConn.Close


dit is een testje wat ik even aan de praat probeer te krijgen zodat ik
als dit werkt mijn INSERT querie kan gaan maken op basis van deze test...

't probleem zit 'm in de datum:

Type mismatch.
/intrascripts/lichtkrant/tryout.asp, line 30


heb nu al 8 pogingen gedaan maar
uiteraard op verschillende wijze
probeer dit
objCmd.CommandText = "SELECT * FROM Datum WHERE bericht_datum = @bericht_datum"

[ Voor 5% gewijzigd door cimbom op 06-02-2004 11:43 ]


  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

En als dat niet werkt knip en plak dan alsjeblieft even regel 30 (en als het even kan je volledige source code) in deze draad...
met zo'n vage ASP foutmelding kunnen we namelijk ook weinig ;)

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
mindcrash schreef op 06 februari 2004 @ 12:14:
En als dat niet werkt knip en plak dan alsjeblieft even regel 30 (en als het even kan je volledige source code) in deze draad...
Beperk dat maar tot de relevante code.

Ws heeft het te maken met die #-jes.
Probeer eens je datum eerst in een variabele van het type date/datetime te stoppen, en geef die variabele dan eens door aan je parameter.

[ Voor 25% gewijzigd door whoami op 06-02-2004 12:18 ]

https://fgheysels.github.io/


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
whoami schreef op 06 februari 2004 @ 12:17:
[...]

Beperk dat maar tot de relevante code.

Ws heeft het te maken met die #-jes.
Probeer eens je datum eerst in een variabele van het type date/datetime te stoppen, en geef die variabele dan eens door aan je parameter.
het probleem zit hierin:

code:
1
2
3
4
Set objParam = objCmd.CreateParameter("@bericht_datum", adDate, adParamInput, 1)

    objCmd.Parameters.Append objParam
    objCmd.Parameters("@bericht_datum") = #2/5/2004#


de database is van het type 'date short' wat inhoud dat er puur d/M/YYYY instaat,
heb ergens vandaag gelezen dat daar iets fout mee gaat

maar intussen ben ik even met een 10-tal andere klusjes bezig geweest die
even tussendoor moesten gebeuren dus ben er weer even uit ..

maar dat was in ieder geval de oorzaak meen ik begrepen te hebben,
de oplossing moet ik nu dus gaan zoeken .. pff wat een dag :?

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
datum = Date

Set objCmd = Server.CreateObject("ADODB.Command")
Set DbConn = Server.CreateObject("Adodb.Connection")

    DbConn.Open strConnect

    objCmd.CommandText = "INSERT INTO datum (bericht_id, bericht_datum) VALUES ( ?, ?)"
    objCmd.CommandType = adCmdText

Set objParam = objCmd.CreateParameter("@bericht_datum", adDate, adParamInput, 1)

    objCmd.Parameters.Append objParam
    objCmd.Parameters("@bericht_datum") = datum

[regel35]    DbConn.Execute objCmd   [/regel35]

    DbConn.Close                

 Set RsMailList = Nothing
 Set DbConn = Nothing


tussen quotes is line 35 naar aanleiding van de gegenereerde error

Type mismatch.
/intrascripts/lichtkrant/tryout.asp, line 35

als ik van adDate een adVarChar maak krijg ik deze error:
Application uses a value of the wrong type for the current operation.


er is dus iets niet goed met die datum,
heel vaag want in een testje van begin deze week gooide ik
er telkens gewoon een VarChar (string dus) in en dan werkte het wel 8)7
MAAR DAN ZONDER parametrized queries

dus misschien dat die

"Set objParam = objCmd.CreateParameter("@bericht_datum", adDate, adParamInput, 1)"

nog steeds niet klopt .. maar wat er dan wel mee moet .. :S
Het type in de database is in ieder geval een SHORT DATE

[ Voor 35% gewijzigd door intrix op 06-02-2004 14:45 ]

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
schiet mij maar lek

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% Option Explicit %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- #INCLUDE FILE="connection.asp" -->
<!-- #INCLUDE FILE="..\..\..\i&ascripts\adovbs.inc" -->
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<%  
server.scripttimeout=15

Dim DbConn, objCmd, objParam
Dim Sql
Dim datum

datum = #2/6/2004#

Response.Write datum

Set objCmd = Server.CreateObject("ADODB.Command")
Set DbConn = Server.CreateObject("Adodb.Connection")

    DbConn.Open strConnect

    objCmd.CommandText = "SELECT * FROM datum WHERE bericht_id = ?"
    objCmd.CommandType = adCmdText

Set objParam = objCmd.CreateParameter("@bericht_id", adInteger, adParamInput, 0, 0)

    objCmd.Parameters.Append objParam
    objCmd.Parameters("@bericht_id") = 139

    DbConn.Execute objCmd
    DbConn.Close                

 Set RsMailList = Nothing
 Set DbConn = Nothing
 Set strConnect = Nothing

%>
</body>
</html>


heb alle stunts uitgehaald die ik kon bedenken,
heb msnd.com en microsoft site nog eens 10x bekeken

maar ik zou echt niet weten waarom dit fout is
voor de mensen die het intressant vinden om te weten
de uitvoer is als volgt:

code:
1
2
3
4
5
6
7
2/6/2004 

Provider error '80020005' 

Type mismatch. 

/intrascripts/lichtkrant/tryout.asp, line 37


Ik ga tot en met maandag maar weer alle boeken in duiken kijken of
ik de fout vinden kan

[ Voor 12% gewijzigd door intrix op 06-02-2004 14:51 ]

welcome my son, welcome to the machine


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Waarom donder je die bericht id niet direct in je create parameter?
Dus:
code:
1
Set objParam = objCmd.CreateParameter("@bericht_id", adInteger, adParamInput, 0, 139)

[ Voor 85% gewijzigd door bigbeng op 06-02-2004 15:38 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik heb het misschien.

Conn.Execute mag niet met een command object, dit moet een string zijn.

Je moet het anders doen
code:
1
2
Set objCmd.ActiveConnection = DBConn
objCmd.Execute

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
ik zie dat je gebruik maakt van adovbs.inc, dan moet je wel de juiste constanten gebruiken, adDate staat niet in mijn lijstje het is adDBTimeStamp

http://www.webcoder.info/reference/mssqldatatypes.html

[ Voor 4% gewijzigd door faabman op 06-02-2004 16:53 . Reden: @bigbeng; zo tevreden ;) ]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
FvKnijff schreef op 06 februari 2004 @ 16:44:
ik neem aan dat je gebruik maakt van adovbs.inc, dus moet je wel de juiste constanten gebruiken, adDate staat niet in mijn lijstje het is adDBTimeStamp

http://www.webcoder.info/reference/mssqldatatypes.html
Als je bovenaan in zijn codevoorbeeld kijkt zul je zien dat adovbs.inc wordt meegenomen in de ASP pagina.

  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 22:16
Parametrized queries werken opzich best goed. Ik zou het op mijn website ook erg graag gebruiken, omdat je dan ook je queries scheid van de code.

Het probleem waar ik echter tegenaan liep, was dat het uitvoeren prima ging, behalve als ik meer dan 4K karakters aan parameters meestuurde. Op dat moment ging mijn OLEDB-driver plat, en gingen alle websites op de server dus ook plat. Dat de rest van de websites plat gingen was een fout in de inrichting van IIS. Dat de OLEDB-driver plat ging was een bug van MS, die ze volgens eigen zeggen nu ook opgelost hebben. Nu wordt de query dus gewoon niet geaccepteerd omdat die te lang is.

  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Ok mijn test werkte, maar nu the real thing nog...

even een uitwerking:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- #INCLUDE FILE="connection.asp" -->
<!-- #INCLUDE FILE="..\..\..\i&ascripts\adovbs.inc" -->
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<% OpenConnection %>
<%  
server.scripttimeout=15

Dim cmdUpdate
Dim strSQL
Dim objParam

Set cmdUpdate = Server.CreateObject("ADODB.Command")

 strSQL = "INSERT INTO datum (bericht_id, bericht_datum) VALUES (?, ?)"
 
  cmdUpdate.ActiveConnection = strConnect

  cmdUpdate.CommandText = strSQL
  cmdUpdate.CommandType = adCmdText

  Set objParam = cmdUpdate.CreateParameter("@bericht_id", adInteger, adParamInput, 0, 139)
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@bericht_datum", adDBTimeStamp, adParamInput, 0, #2/9/2004#)
  cmdUpdate.Parameters.Append objParam

  cmdUpdate.Execute

%>
<% CloseConnection %>
</body>
</html>


Nou ik helemaal blij ik denk mijn testje werkt dan is het nu een questie
van gewoon overnemen en de echte querie invoeren en klaar NOU NIET DUS...

Mijn nieuw strSQL (mijn nieuwe query) ziet er zo uit:

code:
1
 strSQL = "INSERT INTO Bericht (Titel, TitelColor, TitelBgr, BanTop, BanTopPos, BanBot, BanBotPos, Msg, MsgColor, MsgBgr, MsgPos, MsgFont, Img, ImgPos, Time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"


en hier de eerste drie parameters:

code:
1
2
3
4
5
6
7
8
  Set objParam = cmdUpdate.CreateParameter("@Titel", adVarChar, adParamInput, 50, "test")
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@TitelColor", adVarChar, adParamInput, 0, "000000")
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@TitelBgr", adVarChar, adParamInput, 0, "ffffff")
  cmdUpdate.Parameters.Append objParam


Wat wil het geval?

Hij knalt 'm er uit op regel 32 wat overeenkomt met :
Set objParam = cmdUpdate.CreateParameter("@TitelColor", adVarChar, adParamInput, 0, "000000")

fijn :(

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Shit ik zie het inees .. lengte!

bij de eerste heb ik netjes gezegd 50 lang maar bij de rest nog niet!
Ok laat maar ik heb de oplossing!

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Set objParam = cmdUpdate.CreateParameter("@Msg", adLongVarChar, adParamInput, 0, "is een test aan het doen")
cmdUpdate.Parameters.Append objParam

mzz dat schiet niet op .. deze wil ik eigenlijk geen beperkingen op leggen?!

bestaat er niet zo iets als MAX?

*edit:

voorlopig tot iemand mij hier een antwoord op kan geven zet ik 'm maar
op een tekentje of 2000 ofzo ...

[ Voor 22% gewijzigd door intrix op 09-02-2004 09:47 ]

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
code:
1
strSQL = "INSERT INTO Bericht (Titel, TitelColor, TitelBgr, BanTop, BanTopPos, BanBot, BanBotPos, Msg, MsgColor, MsgBgr, MsgPos, MsgFont, Img, ImgPos, Time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"


Ok alle CreateParameter opdrachten heb ik nu dus verbeterd ..
Het enige wat er nu nog fout gaat is een syntax error in het
INSERT INTO statement .. ziet iemand misschien wat er fout gaat?

ik zie namelijk geen verschil tussen dit statement en het statement
wat ik in mijn testversie gebruikt heb, behalve dan dat deze 12 meter
langer is ..

welcome my son, welcome to the machine


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

time is waarschijnlijk een reserved word.

Who is John Galt?


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
justmental schreef op 09 februari 2004 @ 09:52:
time is waarschijnlijk een reserved word.
DANK U .. :)


Dan kan ik nu uit gaan zoeken hoe ik al die 'predefined values'
kan gaan vervangen door Request.Form(" *naam* ")

Ik denk dat het toch zo zal zijn dat ik dan eerst alles naar een 'gewone' var
zal moeten gaan overgooien .. pff vermoeiend zeg!

[ Voor 49% gewijzigd door intrix op 09-02-2004 10:14 ]

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
ik heb alles nu verbouwd en het resultaat is als volgt:

code:
1
2
3
4
5
6
7
8
  Set objParam = cmdUpdate.CreateParameter("@Titel", adVarChar, adParamInput, 80, Request.Form("Title"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@TitelColor", adVarChar, adParamInput, 7, Request.Form("TitelColor"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@TitelBgr", adVarChar, adParamInput, 7, Request.Form("TitelBgr"))
  cmdUpdate.Parameters.Append objParam


maar dan krijg ik de volgende error:

Microsoft JET Database Engine error '80040e10'
Parameter ?_1 has no default value.
/intrascripts/lichtkrant/tryout.asp, line 73


line 73 staat voor


code:
1
  cmdUpdate.Execute



heeft dit te maken met het feit dat ik alles verandert heb in Request.Form("")
Of begrijp ik het goed en is het probleem dat er een lege variabele is
die dus niet geaccepteerd wordt?

Wat is hier de oplossing voor, of is hier geen 'simpele' oplossing voor
en zal ik een soort omweg moeten gaan bedenken?

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
volgens mij heeft 't er niet mee te maken dat er iets leeg is,
als ik namelijk alles een waarde geef (een nep waarde)

dan krijg ik nog steeds

de zelfde error .. :S

welcome my son, welcome to the machine


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 26-05 22:09

Swerfer

Hmm...

intrix schreef op 09 februari 2004 @ 10:31:
volgens mij heeft 't er niet mee te maken dat er iets leeg is,
als ik namelijk alles een waarde geef (een nep waarde)

dan krijg ik nog steeds

de zelfde error .. :S
En als je de request.form("xxxx") veranderd door "xxxx" werkt het wel? Zoals een paar posts hoger?

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Swerfer schreef op 09 februari 2004 @ 10:38:
[...]

En als je de request.form("xxxx") veranderd door "xxxx" werkt het wel? Zoals een paar posts hoger?
Hij werkt nu .. Request.Form("Titel") was verkeerd gespeld vandaar .. gewoon
een TIEPVAUT ;)

welcome my son, welcome to the machine


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 26-05 22:09

Swerfer

Hmm...

Tip:

Geef je variabelen of compleet Engelse namen, of compleet Nederlandse.

TitelColor: Titel = Nederlands Color = Engels Dit kan erg verwarrend werken!

Kijk of je goedkoop aan VisualStudio kan komen. Die gaat gelijk klagen zodra je een variabelnaam verkeerd schrijft. Voorkomt een hoop ellende.

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
Stored procedures:

Stap 1: Maak de stored procedure (Je weet HOE de SQL query eruit moet komen te zien.

Stap 2: Sla SP (Stored procedure) op

Stap 3: vraag variabelen op

Stap 4: Open Connectie naar je SQL server (Ik geloof dat Access geen SP`s kent)

Stap 5: SQL = "[SP-naam] " & Param1 & ", '" & Textparam & "', " & nogeenparam & ";" (Misschien ook wel zonder de ";", Ik gebruik ze namelijk niet(meer)....)

Stap 6: connectie.execute(SQL)

Stap 7: connectie.close

(Hierbij heb ik aangenomen dat MicroSoft SQL-server wordt gebruikt en dat bekend is hoe variabelen worden opgevraagd.

Een stored procedure op deze manier werkt perfect, hoe maf het ook klinkt)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Erhm.. :?
Stored Procedure != Parametrized query

Oftewel: In het geval van parametrized queries is deze methodiek niet bruikbaar.

[ Voor 66% gewijzigd door gorgi_19 op 09-02-2004 13:56 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
sorry je slaat de plank finaal mis,
stored procedures heeft niets met mijn
vraag te maken

[ Voor 76% gewijzigd door intrix op 09-02-2004 13:58 . Reden: lief blijven doen ]

welcome my son, welcome to the machine


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
intrix schreef op 09 februari 2004 @ 13:56:
sorry je slaat de plank finaal mis,
stored procedures heeft niets met mijn
vraag te maken
Okee, kan gebeuren...

een query met parameters onder ASP & SQL:
ASP:
1
2
3
4
5
6
SQL = "SELECT [Naam], [Telefoonnummer] FROM [Gasten] WHERE [Gast_ID] = " _
& Gast_ID & " ORDER BY [Naam];"
Set rstSimple = cnnSimple.Execute(SQL)
if not rstSimple.EoF then Gasten = rstSimple.GetRows()
rstSimple.Close
Set rstSimple = Nothing


Ik heb er nu een getrows van gemaakt, maar dat ligt helemaal aan jezelf natuurlijk (ik gebruik zowat niet anders...)

Je maakt gewoon een select query voorbeeld met je DB-prog, inclusief de criteria, en die criteria ga je dynamisch invullen.

Ik geloof dat dit WEL de bedoeling is.

  • party42
  • Registratie: Oktober 2000
  • Laatst online: 27-05 13:28
Probeert TS nu juist dit niet te voorkomen? Vanzelfsprekend kun je een query dynamisch op deze manier vullen, echter het staat nogal open voor SQL Injections. Derhalve vroeg de TS zich af of dit mbv parametrized queries te voorkomen was...

Ik vraag me nu af waarom je code snipplet laat zien met alsnog een dynamisch opgebouwde query?
Ik geloof dat dit WEL de bedoeling is.
ik geloof het niet... :D

[ Voor 12% gewijzigd door party42 op 10-02-2004 15:07 ]

Everyday's an endless stream, of cigarettes and magazines...


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Maakt allemaal al lang niet meer uit, als je gewoon het topic door zou
lezen zou je zien dat het probleem al lang is opgelost!

Speciaal voor jou:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Set cmdUpdate = Server.CreateObject("ADODB.Command")

 strSQL = "INSERT INTO Bericht (Titel, TitelColor, TitelBgr, BanTop, BanTopPos, BanBot, BanBotPos, Msg, MsgColor, MsgBgr, MsgPos, MsgFont, Img, ImgPos, Duration) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

  cmdUpdate.ActiveConnection = strConnect

  cmdUpdate.CommandText = strSQL
  cmdUpdate.CommandType = adCmdText

  Set objParam = cmdUpdate.CreateParameter("@Title", adVarChar, adParamInput, 80, Request.Form("Title"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@TitleColor", adVarChar, adParamInput, 7, Request.Form("TitleColor"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@TitleBgr", adVarChar, adParamInput, 7, Request.Form("TitleBgr"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@BanTop", adVarChar, adParamInput, 100, Request.Form("BanTop"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@BanTopPos", adVarChar, adParamInput, 7, Request.Form("BanTopPos"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@BanBot", adVarChar, adParamInput, 100, Request.Form("BanBot"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@BanBotPos", adVarChar, adParamInput, 7, Request.Form("BanBotPos"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@Msg", adLongVarChar, adParamInput, 8000, Request.Form("Msg"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@MsgColor", adVarChar, adParamInput, 7, Request.Form("MsgColor"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@MsgBgr", adVarChar, adParamInput, 7, Request.Form("MsgBgr"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@MsgPos", adVarChar, adParamInput, 7, Request.Form("MsgPos"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@MsgFont", adVarChar, adParamInput, 100, Request.Form("MsgFont"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@Img", adVarChar, adParamInput, 100, Request.Form("Img"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@ImgPos", adVarChar, adParamInput, 7, Request.Form("ImgPos"))
  cmdUpdate.Parameters.Append objParam

  Set objParam = cmdUpdate.CreateParameter("@Duration", adInteger, adParamInput, 0, Request.Form("Duration"))
  cmdUpdate.Parameters.Append objParam

  cmdUpdate.Execute

Set cmdUpdate = Nothing

[ Voor 85% gewijzigd door intrix op 10-02-2004 15:16 ]

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
HansMij schreef op 07 februari 2004 @ 11:32:
Parametrized queries werken opzich best goed. Ik zou het op mijn website ook erg graag gebruiken, omdat je dan ook je queries scheid van de code.

Het probleem waar ik echter tegenaan liep, was dat het uitvoeren prima ging, behalve als ik meer dan 4K karakters aan parameters meestuurde. Op dat moment ging mijn OLEDB-driver plat, en gingen alle websites op de server dus ook plat. Dat de rest van de websites plat gingen was een fout in de inrichting van IIS. Dat de OLEDB-driver plat ging was een bug van MS, die ze volgens eigen zeggen nu ook opgelost hebben. Nu wordt de query dus gewoon niet geaccepteerd omdat die te lang is.
4k lijkt mij ook wel heel veel, wat zat er allemaal in dan?

welcome my son, welcome to the machine

Pagina: 1