Връща SCOPE_IDENTITY() с помощта на Adodb.Command

Имам оператор Insert (съхранена процедура), който връща SCOPE_IDENTITY() след вмъкване, но се опитвам да разбера как да го върна, след като използвам ADODB.Command заявка в Classic ASP.

SP включва това в края:

SET @LastID = SCOPE_IDENTITY() -- @LastID is an INT OUTPUT param.

Това се извиква при обработка на заявка за вмъкване в класически ASP код:

set SQLCOMM = Server.CreateObject("ADODB.Command")
SQLCOMM.ActiveConnection = CONNSTRING
SQLCOMM.CommandText = "Insert_SP_Returns_ScopeID"
SQLCOMM.CommandType = 1
SQLCOMM.CommandTimeout = 0
SQLCOMM.Prepared = true

LastIDParameter = SQLCOMM.CreateParameter("@LastID",adInteger,adParamOutput)
SQLCOMM.Parameters.Add(LastIDParameter)

SQLCOMM.Execute() 

LastID = LastIDParameter.Value

set SQLCOMM=Nothing

Трябва ли просто да направя нещо подобно, преди да set SQLCOMM=Nothing?

NewID = SQLCOMM("LastID").Value

ИЛИ... може ли съхранена процедура за вмъкване/актуализиране да бъде изпълнена от Adodb.Recordset вместо от ADODB.Command?

    The example above gives the following error message:
    ADODB.Command error '800a0bb9'

    Arguments are of the wrong type, are out of acceptable range, 
    or are in conflict with one another. 

Грешката се връща поради този ред код:

LastIDParameter = SQLCOMM.CreateParameter("@LastID",adInteger,adParamOutput)

person Wilkins    schedule 30.08.2011    source източник


Отговори (1)


Вашият команден подход за извикване на съхранената процедура е наред. Всичко, което трябва да направите, е да добавите допълнителен изходен параметър към командния обект. (Не съм правил vbscript от години и затова не съм сигурен дали трябва изрично да въвеждате вашите променливи).

В VB скрипт

set SQLCOMM = Server.CreateObject("ADODB.Command") 
SQLCOMM.ActiveConnection = CONNSTRING 
SQLCOMM.CommandText = "Insert_SP_Returns_ScopeID" 
SQLCOMM.CommandType = 1 
SQLCOMM.CommandTimeout = 0 
SQLCOMM.Prepared = true 

Dim LastIDParameter
Dim LastID

LastIDParameter = SQLCOMM.CreateParameter("@LastID",adInteger,adParamOutput)
SQLCOMM.Parameters.Add(LastIDParameter)

SQLCOMM.Execute() 

LastID = LastIDParameter.Value

set SQLCOMM=Nothing 

И след това във вашата съхранена процедура.

CREATE PROCEDURE Insert_SP_Returns_ScopeID

@Value1 int,
@Value2 int,
@LastID int OUTPUT

AS

INSERT INTO TableName(Value1,Value2) VALUES (@Value1,@Value2)

SET @LastID = SCOPE_IDENTITY()

РЕДАКТИРАНЕ: Може да се наложи да потърсите стойностите на adInteger,adParamOutput и да ги използвате, тъй като константите може да не са дефинирани за вашата среда. Ако е така използвайте...

SQLCOMM.CreateParameter("@LastID",3,2)

или дефинирайте константите.

person David Steele    schedule 30.08.2011
comment
Всъщност получавам грешка за това: ADODB.Command error '800a0bb9' Аргументите са от грешен тип, извън допустимия обхват или са в конфликт един с друг. РЕД ПРИЧИНЯВАЩ ГРЕШКАТА: LastIDParameter = SQLCOMM.CreateParameter(@LastID,adInteger,adParamOutput) - person Wilkins; 30.08.2011