webForumDet fria alternativet

Stored procedure-problem

5 svar · 212 visningar · startad av Andy

AndyMedlem sedan sep. 2001138 inlägg
#1

Jag är relativt ny vad gäller stored procedures...

Har en stored procedure som ser ut så här:

CREATE PROCEDURE sp_listTopicsByUser AS
DECLARE @id AS int
DECLARE @lastvisit AS datetime

SELECT     ID AS ID, Title AS Title, [Date] AS Date,
                          (SELECT     COUNT(*)
                            FROM          tablePosts
                            WHERE      BelongsToTopic = tt.ID) AS Replies,
                          (SELECT     COUNT(*)
                            FROM          tablePosts
                            WHERE      (BelongsToTopic = tt.ID AND Date > @lastvisit)) AS NewReplies
FROM         tableTopics tt
WHERE     (Poster = @id)
ORDER BY [Date] DESC
GO

Koden jag använder för att anropa min stored procedure, samt skicka värden till den ser ut så här:

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = Connect
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_listTopicsByUser"
cmd.Parameters.Append cmd.CreateParameter("id", adVarChar, adParamInput, 4, Trim(Session("userid")))
cmd.Parameters.Append cmd.CreateParameter("lastvisit", adDate, adParamInput, 8, CDate(Session("lastVisit")))
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open cmd, , adOpenStatic, adLockOptimistic

När jag kör sidan får jag följande felmeddelande:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
[Microsoft][ODBC SQL Server Driver]Optional feature not implemented
/members/default.asp, line 282

Någon som vet vad som är fel.

emissionMedlem sedan dec. 19996 721 inlägg
#2

Har du inkluderat adovbs.inc?

AndyMedlem sedan sep. 2001138 inlägg
#3

Japp!

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Om du vill att id och lastvisit skall vara inparametrar så

CREATE PROCEDURE sp_listTopicsByUser @id int,
@lastvisit datetime
as 
SELECT ID AS ID, Title AS Title, [Date] AS Date,
(SELECT COUNT(*)
FROM tablePosts
WHERE BelongsToTopic = tt.ID) AS Replies,
(SELECT COUNT(*)
FROM tablePosts
WHERE (BelongsToTopic = tt.ID AND Date > @lastvisit)) AS NewReplies
FROM tableTopics tt
WHERE (Poster = @id)
ORDER BY [Date] DESC
GO

Själva anropet skulle jag skriva så här

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = Connect
cmd.CommandType = adCmdText
cmd.CommandText = "sp_listTopicsByUser '" & trim(Session("userid"))
 & "','" & Session("lastVisit") & "'"
set rs = cmd.execute

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 07 nov 2001]

AndyMedlem sedan sep. 2001138 inlägg
#5

Tack! Fungerade perfekt. Och det var ju ett betydligt smidigare sätt att anropa en store procedure på...

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Att använda metoden med parametrar till ett command-objekt har man mest nytta av om man vill göra flera anrop till samma procedure. I det fallet så behöver man bara sätta nya värden på parametrarna och om databasen har en vettig hantering så skall man slippa omkompilering av sql-frågan vilket innebär en prestandavinst.

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 09 nov 2001]

127 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)