Zelfs whoami (
) kon me niet helpen met dit probleem, dus ik hoop dat er iemand anders een helder idee heeft 
Ik heb een SP geschreven, en die komt ongeveer hier op neer:
testtabel heeft een veldje 'id' dat autonummert, en ik wil dus met deze SP een record inserten, en vervolgens de id returnen zodat ik deze weer kan gebruiken in m'n ASP/VBScript code.
Als ik deze SP draai in de Query-Analyzer, dan krijg ik heel netjes als resultaat een veldje 'insertid' met daarin de id van het record dat ik zojuist heb geinsert.
Echterrrrr, als ik dit in ASP probeer, dan gaat het fout.
Mijn code ziet er zo uit:
Daar krijg ik alleen een dikke foutmelding op:
Na een paar uur prutsen en googlen kwam ik geen steek verder, en toen raadde whoami me aan om met een output parameter te werken. Ook dat heb ik geprobeerd:
..met de volgende code:
Maar helaas pindakaas, er verschijnt niets op mijn scherm (ook geen foutmelding overigens).
Wie o wie heeft er een idee hoe ik dit voor elkaar ga krijgen?
Ik heb een SP geschreven, en die komt ongeveer hier op neer:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
| CREATE PROCEDURE [dbo].[testsp] ( @naam VARCHAR(32), @adres VARCHAR(32) ) AS INSERT INTO testtabel (naam, adres) VALUES (@naam, @adres) SELECT @@IDENTITY AS 'insertid' GO |
testtabel heeft een veldje 'id' dat autonummert, en ik wil dus met deze SP een record inserten, en vervolgens de id returnen zodat ik deze weer kan gebruiken in m'n ASP/VBScript code.
Als ik deze SP draai in de Query-Analyzer, dan krijg ik heel netjes als resultaat een veldje 'insertid' met daarin de id van het record dat ik zojuist heb geinsert.
Echterrrrr, als ik dit in ASP probeer, dan gaat het fout.
Mijn code ziet er zo uit:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| set InsertRecord = Server.CreateObject("ADODB.Command") InsertRecord.ActiveConnection = "bla bla connection string" InsertRecord.CommandText = "[dbo].[testsp]" InsertRecord.CommandType = 4 InsertRecord.CommandTimeout = 0 InsertRecord.Prepared = true InsertRecord.Parameters.Append InsertRecord.CreateParameter("@RETURN_VALUE", 3, 4) InsertRecord.Parameters.Append InsertRecord.CreateParameter("@naam", 200, 1, 32, "Sjaak de Bever") InsertRecord.Parameters.Append InsertRecord.CreateParameter("@adres", 200, 1, 32, "Knelstraat 169") set result_recordset = InsertRecord.Execute response.write result_recordset.fields.item("insertid").value |
Daar krijg ik alleen een dikke foutmelding op:
En dat is heel raar, want als ik op exact een soortgelijke manier een SP aanroep met daarin gewoon een SELECT veld FROM tabel, dan gaat het wel goed.Item cannot be found in the collection corresponding to the requested name or ordinal.
Na een paar uur prutsen en googlen kwam ik geen steek verder, en toen raadde whoami me aan om met een output parameter te werken. Ook dat heb ik geprobeerd:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
| CREATE PROCEDURE [dbo].[testsp] ( @insertid INT OUTPUT, @naam VARCHAR(32), @adres VARCHAR(32) ) AS INSERT INTO testtabel (naam, adres) VALUES (@naam, @adres) SELECT @insertid = SCOPE_IDENTITY() FROM testtabel GO |
..met de volgende code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| set InsertRecord = Server.CreateObject("ADODB.Command") InsertRecord.ActiveConnection = "bla bla connection string" InsertRecord.CommandText = "[dbo].[testsp]" InsertRecord.CommandType = 4 InsertRecord.CommandTimeout = 0 InsertRecord.Prepared = true InsertRecord.Parameters.Append InsertRecord.CreateParameter("@RETURN_VALUE", 3, 4) InsertRecord.Parameters.Append InsertRecord.CreateParameter("@insertid", 3, 2) InsertRecord.Parameters.Append InsertRecord.CreateParameter("@naam", 200, 1, 32, "Sjaak de Bever") InsertRecord.Parameters.Append InsertRecord.CreateParameter("@adres", 200, 1, 32, "Knelstraat 169") set result_recordset = InsertRecord.Execute response.write InsertRecord.Parameters("@insertid").value |
Maar helaas pindakaas, er verschijnt niets op mijn scherm (ook geen foutmelding overigens).
Wie o wie heeft er een idee hoe ik dit voor elkaar ga krijgen?