10 messaggi dal 11 gennaio 2005
Ciao a tutti, sono abbastanza nuovo nella scrittura di store proc e ho soprattutto qualche difficoltà nella interazione con Asp.

Io dovrei tirar fuori da una stored procedure un valore (il numero di record inseriti in una tabella), e nel contempo vorrei leggere una variabile che mi fa capire che tutto è andato a posto (il COMMIT è avvenuto).

Ve la incollo qui sotto.

create procedure spNewsletter
@nRec int output

as
truncate table SendNewsletter

declare @esito int

begin tran
insert into SendNewsletter (email) (
select distinct(email) from shop.dbo.shopAcquirenti
union
select distinct(email) from dbo.Utenti
union
select distinct(email) from dbo.Mail_Nwsl
)


if @@error = 0
commit tran
select @nRec = count(email) from SendNewsletter
set @esito= 1
return @esito


if @@error <> 0
rollback tran
set @esito= 0
return @esito
GO


Ed ecco invece il codice asp:
Set con = Server.CreateObject("ADODB.Connection")
con.open = "Provider = SQLOLEDB;Data Source = (local);Initial Catalog = xxx;User ID=xxx"

set dbComm = Server.CreateObject("ADODB.Command")
dbComm.ActiveConnection = con

dbComm.CommandType = 4

dbComm.CommandText = "spNewsletter"

dbComm.Parameters.Append dbComm.CreateParameter("esito", 3, 4)
dbComm.Parameters.Append dbComm.CreateParameter("nRec", 3, 4)

dbComm.Execute

if dbComm.Parameters(0).Value = 1 then

Response.Write "Aggiornamento effettuato correttamente "
Response.Write "<br> Attualmente sono presenti " & dbComm.Parameters(1).Value & " indirizzi email a cui inviare la newsletter"

else
Response.Write "Aggiornamento NON effettuato "

end if



Se qualcuno potesse controllare la correttezza di quello che ho scritto.... Tengo a precisare che funziona, però mi rimane qualche dubbio... ho la netta impressione che non sia ottimizzata!

Grazie

277 messaggi dal 30 settembre 2003
guarda io ho usato questo tutorial :

Una stored procedure è più performante, a parità di complessità e quando quest'ultima è elevata, di una query SQL eseguita in una pagina ASP.
L'esempio di oggi permette di utilizzare una stored procedure che inserisce in una nuova tabella due valori, username e nome e restituisce il numero progessivo di identificazione dello stesso.
Per fare questo, utilizzeremo due parametri di input ed uno di output:


<!--METADATA Type="typelib" uuid="{00000205-0000-0010-8000-00AA006D2EA4}"-->
<%

Set conn = Server.CreateObject("ADODB.Connection")
set command = Server.CreateObject("ADODB.Command")
conn.Open strConn ' da valorizzare

command.ActiveConnection = conn
command.CommandText = "sp_NuovoUtente"
command.CommandType = adCmdStoredProc

' parametri di input
' formato: nomecampo, tipo, tipo di parametro, lunghezza, valore
set objParameter = command.CreateParameter ("@username", adVarChar, adParamInput, 30, username)
command.Parameters.Append objParameter

set objParameter = command.CreateParameter ("@nome", adVarChar, adParamInput, 255, nome)
command.Parameters.Append objParameter

' parametri di output
set objParameter = command.CreateParameter ("@UserID", adInteger, adParamOutput, , 0)
command.Parameters.Append objParameter

' execute per eseguire senza avere un recordset di ritorno
command.Execute , , adExecuteNoRecords

' ricavo l'userID appena inserito
UserID = command.Parameters("@UserID")

Response.write "Hai il numero " & userID

%>

I parametri vanno aggiunti nello stesso ordine in cui sono nella stored procedure.
Ed ecco la stored procedure che utilizzeremo per inserire un nuovo utente e ricavare come output il valore inserito:


Create PROCEDURE sp_NuovoUtente
(
@username varchar(30),
@nome varchar(255),
@UserID int OUTPUT
)
AS
BEGIN
INSERT INTO utenti (username, nome)
VALUES (@username, @nome)

SELECT @UserID = @@IDENTITY
END

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.