/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Status på project Parameterized Queries?
Fra : Rune Jensen


Dato : 16-03-10 19:35

http://groups.google.com/group/dk.edb.internet.webdesign.serverside.asp/browse_thread/thread/52ac07ee156f6690/fdec9b5a27b3e1a1

Jeg ville gerne vide, om nogen kan fortælle status på projektet.

Er man blevet enige om en funktion, som virker?

Er der skrevet noget tutorial-værk eller lign. så det kan bruges
umiddelbart?


MVH
Rune Jensen

 
 
Stig Johansen (16-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 16-03-10 23:22

Rune Jensen wrote:
> Er man blevet enige om en funktion, som virker?

Jeg ved ikke om man er enige, men den funktion jeg referer til virker fint
allevegne hvor jeg bruger den.

> Er der skrevet noget tutorial-værk eller lign. så det kan bruges
> umiddelbart?

Næppe, men funktionen kan bruges umiddelbart.

--
Med venlig hilsen
Stig Johansen

Leif Neland (17-03-2010)
Kommentar
Fra : Leif Neland


Dato : 17-03-10 16:22


"Stig Johansen" <wopr.dk@gmail.com> skrev i en meddelelse
news:4ba0053a$0$278$14726298@news.sunsite.dk...
> Rune Jensen wrote:
>> Er man blevet enige om en funktion, som virker?
>
> Jeg ved ikke om man er enige, men den funktion jeg referer til virker fint
> allevegne hvor jeg bruger den.

Jeg skulle lige se, om jeg kunne få den opringelige funktion til at virke,
men den fejler stadig:

set res=query(record,"SELECT navn from kunder where
id=?",array(request.form("KundeId")),-1)

giver intet resultat

set res=query(record,"SELECT navn from kunder where id=cast(? as
integer)",array(request.form("KundeId")),-1)

Min udgave, hvor man explicit skal angive et array med parametertypen
fungerer...

Er forskellen, at jeg kører op imod en sqlserver, mens du kører imod access?

Leif



Stig Johansen (18-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 18-03-10 06:50

Leif Neland wrote:

>
> Er forskellen, at jeg kører op imod en sqlserver, mens du kører imod
> access?

Det må vi prøve at finde ud af.
En umiddebar forskel er, at jeg vist ikke bruger værdien direkte, men mere
af formen:
Dim notesid
notesid=request.querystring"id")
og så selve kaldet.

Jeg har lidt bøvl med mit udstyr, så jeg får nok ikke testet mod min
SQServer lige med det samme.

Har du adgang til profiler på din server?

Her burde man kunne se hvad der bliver sendt på wiren.


--
Med venlig hilsen
Stig Johansen

Leif Neland (23-03-2010)
Kommentar
Fra : Leif Neland


Dato : 23-03-10 15:23

Den 18-03-2010 06:49, Stig Johansen skrev:
> Leif Neland wrote:
>
>>
>> Er forskellen, at jeg kører op imod en sqlserver, mens du kører imod
>> access?
>
> Det må vi prøve at finde ud af.
> En umiddebar forskel er, at jeg vist ikke bruger værdien direkte, men mere
> af formen:
> Dim notesid
> notesid=request.querystring("id")
> og så selve kaldet.
>
> Jeg har lidt bøvl med mit udstyr, så jeg får nok ikke testet mod min
> SQServer lige med det samme.
>
> Har du adgang til profiler på din server?
>
> Her burde man kunne se hvad der bliver sendt på wiren.
>
>
Her er et forsøg:
cDbl for at være sikker på at det er et heltal, der serveres:

set res=query(Conn,"select dato from t_ordrer where id=
?",array(cDbl(request.querystring("id"))),1)

med adVariant:
exec sp_executesql N'select dato from t_ordrer where id= @P1', N'@P1
sql_variant', 1.006700000000000e+005
Der testes altså om id(heltal) er lig et flydende tal. Det er det
sjældent; recorden findes ikke.

Bruges i stedet adInteger, findes den ønskede record.
exec sp_executesql N'select dato from t_ordrer where id= @P1', N'@P1
int', 100670


Bruges adVariant, og uden cDbl:
set res=st_query(Conn,"select dato from t_ordrer where id=
?",array(request.querystring("id")),1)

Record findes ikke.
exec sp_executesql N'select dato from t_ordrer where id= @P1', N'@P1
sql_variant', N'100670'

N'100670' != 100670

Kan grunden til at det lykkes for dig er, at dine id'er er så små, at
der ikke optræder afrundingsfejl?

Leif

Stig Johansen (23-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 23-03-10 17:21

Leif Neland wrote:

> Kan grunden til at det lykkes for dig er, at dine id'er er så små, at
> der ikke optræder afrundingsfejl?

Nu fik du mig til at undersøge det ;)
Jo, som du skriver, så virker det ikke umiddelbart på ms sqlserver hvis det
er en integer.

Da variant typen ligger i selve variablen, virker det fint hvis jeg i stedet
bruger:
notesid=cInt(request.querystring("id"))
- her impliceres en integer type.

Jeg vil nok foretrække at 'erklære' typen på den måde fremfor at skue angive
parmetertypen på hver eneste parameter.

De fleste af mine er trods alt strenge.

--
Med venlig hilsen
Stig Johansen

Leif Neland (24-03-2010)
Kommentar
Fra : Leif Neland


Dato : 24-03-10 10:55


"Stig Johansen" <wopr.dk@gmail.com> skrev i en meddelelse
news:4ba8ea9f$0$276$14726298@news.sunsite.dk...
> Leif Neland wrote:
>
>> Kan grunden til at det lykkes for dig er, at dine id'er er så små, at
>> der ikke optræder afrundingsfejl?
>
> Nu fik du mig til at undersøge det ;)
> Jo, som du skriver, så virker det ikke umiddelbart på ms sqlserver hvis
> det
> er en integer.
>
> Da variant typen ligger i selve variablen, virker det fint hvis jeg i
> stedet
> bruger:
> notesid=cInt(request.querystring("id"))
> - her impliceres en integer type.
>
> Jeg vil nok foretrække at 'erklære' typen på den måde fremfor at skue
> angive
> parmetertypen på hver eneste parameter.

Mine id'er er for store til at være i en int, så jeg havde brugt cDbl i
stedet. Det var en fejl...
Bruger jeg cLng i stedet, virker det.

exec sp_executesql N'select dato from t_ordrer where id= @P1', N'@P1
sql_variant', 100670

Jeg grep'per lige min app efter cDbl...

Leif



Stig Johansen (24-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 24-03-10 11:46

Leif Neland wrote:

> "Stig Johansen" <wopr.dk@gmail.com> skrev i en meddelelse
>> notesid=cInt(request.querystring("id"))
>> - her impliceres en integer type.
>>
>> Jeg vil nok foretrække at 'erklære' typen på den måde fremfor at skue
>> angive
>> parmetertypen på hver eneste parameter.
>
> Mine id'er er for store til at være i en int, så jeg havde brugt cDbl i
> stedet. Det var en fejl...
> Bruger jeg cLng i stedet, virker det.

Jeg ved ikke rigtig hvad du har gang i, men at betragte en integer som
floating point er dømt til at misllykkes.

> exec sp_executesql N'select dato from t_ordrer where id= @P1', N'@P1
> sql_variant', 100670
>
> Jeg grep'per lige min app efter cDbl...

Hvis du søger efter datoer (aka floating point), så får du "sweren
problemen".

--
Med venlig hilsen
Stig Johansen

Leif Neland (24-03-2010)
Kommentar
Fra : Leif Neland


Dato : 24-03-10 12:14


>> Mine id'er er for store til at være i en int, så jeg havde brugt cDbl i
>> stedet. Det var en fejl...
>> Bruger jeg cLng i stedet, virker det.
>
> Jeg ved ikke rigtig hvad du har gang i, men at betragte en integer som
> floating point er dømt til at misllykkes.
>
tanketorsk... Tænkte at resultatet af cDbl var dobbelt så lang som af cInt

og det virkede jo i "select * from tabel where id =" &
cDbl(request.querystring("id"))

forøvrigt, så fangede sql-inject-sikringen lige en fra Letland, der prøvede
med

.....asp?Id=1%20or%201=@@version--

.... den gik ikke, Granberg.

Leif



Stig Johansen (24-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 24-03-10 14:04

Leif Neland wrote:

> forøvrigt, så fangede sql-inject-sikringen lige en fra Letland, der
> prøvede med
>
> ....asp?Id=1%20or%201=@@version--
>
> ... den gik ikke, Granberg.

Næh.. ;)
Hvis man bruger parameterized queries, så kan de hoppe i havet, og skide
grønne grise, og intet hjælper

Men desværre er det lettere at lade være.

--
Med venlig hilsen
Stig Johansen

Stig Johansen (24-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 24-03-10 17:44

Leif Neland wrote:

>> Jeg ved ikke rigtig hvad du har gang i, men at betragte en integer som
>> floating point er dømt til at misllykkes.
>>
> tanketorsk... Tænkte at resultatet af cDbl var dobbelt så lang som af cInt

Nu er ASP ikke lige min stærke side, men generelt så er en double dobbelt så
'lang' som en single.

Begge er floating points, som er dømt til afrundingsfejl.
(Der findes også en extended - 10 bytes, men den udgår vist).

Integer var 16 bit på 16 bits systemer, og 32 bits på 32 bit systemer.

Hmm.. søgte lige på nettet...
Det ser ud som om cInt i ASP er en 16 bits integer (tsk..), så du har ret i,
at man bør bruge en clng for at få en integer (int i databasen) - tsk..

--
Med venlig hilsen
Stig Johansen

Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407845
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste