Toon posts:

SQL StoredProc adParamOutPut

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

Verwijderd

Topicstarter
Allereerst even vermelden; IUTFS (I Used The F*cking Search). ;)
Een hele hoop gevonden, nog meer gelezen, veel wijzer geworden maar mijn probleem blijft. :'(

Het probleem is als volgt. Ik heb een stored procedure op mijn SQL2K bakkie gemaakt, welke een input parameter meekrijgt en een output parameter moet teruggeven.

In de volgende code test ik met @Naam = 7 want daarvan weet ik dat die in de tabel bestaat.

tabel:
UserID numeric
UserName nvarchar

Dit is de StoredProcedure
code:
1
2
3
4
5
6
7
8
9
CREATE PROCEDURE SP_UserExists
    (
        @Naam numeric
    )
AS
    SELECT UserName
    FROM T_User
    WHERE UserID = @Naam
GO

Dit is de ASP Code
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
dim thedate
dim thetime
dim RS
dim ParamID
dim Conn
dim cmdStoredProc

Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Provider=SQLOLEDB;Data Source=gx1;" & "Initial Catalog=rcvna
;User Id=sa;Password=abc3652230;" & "Connect Timeout=15;Network Library=dbmssocn;"

' kijken of de username al bestaat
Set cmdStoredProc = Server.CreateObject("ADODB.Command")
    cmdStoredProc.ActiveConnection = Conn
    cmdStoredProc.CommandText = "SP_UserExists"
    cmdStoredProc.CommandType = adCmdStoredProc
    
set paramid = cmdStoredProc.CreateParameter("@Naam", adVarWChar, adParamInput,12,7)
cmdStoredProc.Parameters.Append paramId

set rs = cmdstoredproc.execute 
    Response.Write rs.fields("UserName")
    
    
set rs = nothing
set paramid = nothing
set cmdStoredProc = nothing
set conn = nothing

Deze code geeft netjes een username terug, en dit snap ik nog.
Maar eigenlijk wil ik geen getal meesturen maar een string (de username).
Als ik de SP verander
code:
1
2
3
4
5
6
7
8
9
CREATE PROCEDURE SP_UserExists
    (
        @Naam nvarchar
    )
AS
    SELECT UserName
    FROM T_User
    WHERE UserName = @Naam
GO

en in de ASP
code:
1
set paramid = cmdStoredProc.CreateParameter("@Naam", adVarWChar, adParamInput,12,"Jeroen")

Dan krijg ik helemaal nix terug, terwijl je het getal 7 (de UserID) zou verwachten. :?
Ik vermoed dat het iets heel simpels is dat ik over het hoofd zie. Misschien dat een vriendelijke mede-tweaker mij kan helpen?

[ Voor 4% gewijzigd door Verwijderd op 06-03-2003 23:01 . Reden: Layout-verneuk-modus uitgezet ]


  • whoami
  • Registratie: December 2000
  • Nu online
Is het veld UserName alfanumeriek in je tabel?
Is er een record waarvan het veld username == Jeroen?

Waarom zou je het getal 7 (de userid) verwachten, terwijl je eigenlijk de username opvraagt? ;)

https://fgheysels.github.io/


Verwijderd

Ik denk dat je probleem te maken heeft met het feit dat je een verkeerde lengte meegeeft.
Je geeft namelijk een lengte van 12 mee terwijl die lengte nergens vandaan komt.
Wat is de lengte van T_user.Username in de database?
De lengte van @Naam in de stored procedure moet overeenkomen met die in de CreateParameter.

Overigens is het handiger om:

set paramid = cmdStoredProc.CreateParameter("@Naam", adVarWChar, adParamInput,12,7)

cmdStoredProc.Parameters.Append paramId

te vervangen door:

cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("@Naam", adVarWChar, adParamInput,12,7)

Dit scheelt weer een variabele.
Het gebruik van with en end with is ook geen overbodige luxe...

succes!

Verwijderd

Wat heel prettig werkt, is de proviler van SQL server.
Hierin kun je kijken welke sp afgevuurd wordt en wat teruggestuurd wordt.
Op basis hiervan moet vrij eenvoudig te bepalen zijn, wat je fout doet.

Verwijderd

Topicstarter
whoami schreef op 07 maart 2003 @ 09:11:
Is het veld UserName alfanumeriek in je tabel?
Is er een record waarvan het veld username == Jeroen?

Waarom zou je het getal 7 (de userid) verwachten, terwijl je eigenlijk de username opvraagt? ;)
Het veld UserName is altijd nvarchar(12). In het eerste voorbeeld vraag ik die op door een
getal (7) mee te geven en krijg ik netjes de waarde van het veld UserName terug (Jeroen). Ik weet dus
"toevallig" dat het record met ID=7 als UserName Jeroen heeft. Dit om te testen.

In het tweede voorbeeld wil ik dus het omgekeerde doen; ik geef de string "Jeroen" mee, en verwacht
dus een UserID=7 terug.
Verwijderd schreef op 07 March 2003 @ 13:22:
Ik denk dat je probleem te maken heeft met het feit dat je een verkeerde lengte meegeeft.
Je geeft namelijk een lengte van 12 mee terwijl die lengte nergens vandaan komt.
Wat is de lengte van T_user.Username in de database?
De lengte van @Naam in de stored procedure moet overeenkomen met die in de CreateParameter.

Overigens is het handiger om:

set paramid = cmdStoredProc.CreateParameter("@Naam", adVarWChar, adParamInput,12,7)

cmdStoredProc.Parameters.Append paramId

te vervangen door:

cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter("@Naam", adVarWChar, adParamInput,12,7)

Dit scheelt weer een variabele.
Het gebruik van with en end with is ook geen overbodige luxe...

succes!
Ik heb nogal zitten rommelen met de code, en de verbeteringen die jij aangeeft zijn zeker nodig.
Dit is alleen nog even "test-code", de uiteindelijke code zal netjes worden :)
Verwijderd schreef op 07 maart 2003 @ 13:25:
Wat heel prettig werkt, is de proviler van SQL server.
Hierin kun je kijken welke sp afgevuurd wordt en wat teruggestuurd wordt.
Op basis hiervan moet vrij eenvoudig te bepalen zijn, wat je fout doet.
Yep! Profiler Rules! :) die geeft : exec SP_UserExists 'Jeroen'
en returned NIX :'(

Verwijderd

Blijkbaar staat in het veld geen "Jeroen" maar iets anders...
Het zou kunnen dat een van de twee met spaces gevuld wordt.

Verwijderd

Topicstarter
Als ik in de table kijk zie ik toch echt Jeroen staan.....

Verwijderd

Wat gebeurt er als je zegt:

SELECT *
FROM T_User
WHERE UserName = 'Jeroen'

?

Verwijderd

Topicstarter
Dan krijg ik netjes records te zien.
Ik zit nu achter (voor?) een andere machine en heb ff een nieuwe db gemaakt met daarin de tabel T_Users. 3 records ingevuld. Als ik
code:
1
2
3
SELECT *
FROM t_User
WHERE UserName = 'Jeroen'

nu in query analyzer gooi krijg ik weer netjes drie records.
Als ik de stored procedure
code:
1
2
3
4
5
6
7
8
9
CREATE PROCEDURE SP_UserExists
    (
        @Naam nvarchar
    )
AS
    SELECT *
    FROM T_User
    WHERE UserName = @Naam
GO

uitvoer in de query analyzer dmv. exec SP_UserExists N'Jeroen' dan krijg ik weer nix.....

  • whoami
  • Registratie: December 2000
  • Nu online
Maak eens van NVarchar gewoon varchar....

https://fgheysels.github.io/


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

cimbom

Just Kidding

Mischien LIKE gebruiken i.p.v = teken

  • whoami
  • Registratie: December 2000
  • Nu online
cimbom schreef op 07 March 2003 @ 16:27:
Mischien LIKE gebruiken i.p.v = teken


Een like heeft hier geen nut, aangezien er niet met wildcards gewerkt wordt.

https://fgheysels.github.io/


Verwijderd

Maak er nou eens netjes

CREATE PROCEDURE SP_UserExists
(
@Naam nvarchar(12)
)
van, anders neemt hij alleen de eerste letter "j" als input

Vanaf het begin af aan netjes programmeren verdient zichzelf snel terug!

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op 07 maart 2003 @ 13:22:
De lengte van @Naam in de stored procedure moet overeenkomen met die in de CreateParameter.
Dat is niet strikt noodzakelijk. De lengte die je meegeeft aan de CreateParameter geeft alleen de maximale lengte aan van de parameter. De waarde van de inputvariabele van de stored procedure kan best een andere waarde hebben.
Verwijderd schreef op 07 March 2003 @ 16:36:
Maak er nou eens netjes

CREATE PROCEDURE SP_UserExists
(
@Naam nvarchar(12)
)
van, anders neemt hij alleen de eerste letter "j" als input
Dit lijkt mij inderdaad een goed idee :)

Today's subliminal thought is:


Verwijderd

Topicstarter
Verwijderd schreef op 07 March 2003 @ 16:36:
Maak er nou eens netjes

CREATE PROCEDURE SP_UserExists
(
@Naam nvarchar(12)
)
van, anders neemt hij alleen de eerste letter "j" als input

Vanaf het begin af aan netjes programmeren verdient zichzelf snel terug!
YESSS!!!
Dat was het dus! Nu werkt het prima! Ik ben hier zoooo lang mee aan het knoeien geweest... Thanx John_Bruin!! _/-\o_

I O U 1! :*)
Pagina: 1