Newsgroup: it.comp.lang.visual-basic
Titolo: adParamOutput con ADO Command

--
Salve,
C'e' qualcuno che ha mai usato ADO per accedere a delle stored procedure?
Il mio problema è nei parametri di ritorno che non ritornano!
la metodologia con qui chiamo la stored è questa:
    ' Chiama la stored-procedure per inserire i dati PPP
    cnt_Cmd.CommandText = "ins_WebP_NuovoClientePrivato"
    cnt_Cmd.CommandType = adCmdStoredProc
    cnt_Cmd.CommandTimeout = 15
    ' Inserimento 1° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("Nome", _
                                                      adVarChar, _
                                                      adParamInput, _
                                                      50, _
                                                      Nome)
    ' Inserimento 2° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("Cognome", _
                                                      adVarChar, _
                                                      adParamInput, _
                                                      50, _
                                                      Cognome)
    ' Inserimento 3° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("Indirizzo", _
                                                      adVarChar, _
                                                      adParamInput, _
                                                      255, _
                                                      Indirizzo)
    ' Inserimento 4° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("IDCItta", _
                                                      adInteger, _
                                                      adParamInput, _
                                                      4, _
                                                      IDCItta)
    ' Inserimento 5° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("CAP", _
                                                      adVarChar, _
                                                      adParamInput, _
                                                      5, _
                                                      CAP)
    ' Inserimento 6° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("TelAbitazione", _
                                                      adVarChar, _
                                                      adParamInput, _
                                                      50, _
                                                      TelAbitazione)
    ' Inserimento 7° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("TelCellulare", _
                                                      adVarChar, _
                                                      adParamInput, _
                                                      50, _
                                                      TelCellulare)
    ' Inserimento 8° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("CodiceFiscale", _
                                                      adVarChar, _
                                                      adParamInput, _
                                                      16, _
                                                      CodiceFiscale)
    ' Inserimento 9° parametro
    cnt_Cmd.Parameters.Append cnt_Cmd.CreateParameter("IDCliente", _
                                                      adInteger, _
                                                      adParamOutput, _
                                                      , _
                                                      IDCliente)
    ' Esegue la stored procedure
    Set cnt_Rec = cnt_Cmd.Execute()
mentre la stored procedure è:
Create Procedure ins_WebP_NuovoClientePrivato
/*Dati in INGRESSO*/
  /*Utente privato*/
  @Nome varchar(50),   /*Nome della persona a cui verrà intestato il
servizio*/
  @Cognome varchar(50),  /*Cognome della persona a cui verrà intestato il
servizio*/
  @Indirizzo varchar(255), /*Indirizzo della persona a cui verrà intestato
il servizio*/
  @IDCitta int,    /*Numero della città della persona a cui verrà intestato
il servizio*/
  @Cap varchar(5),   /*CAP della persona a cui verrà intesto il servizio*/
  @TelAbitazione varchar(50), /*Telefono di abitazione della persona a cui
verrà intestato il servizio*/
  @TelCellulare varchar(50), /*Telefono cellulare della persona a cui verrà
intestato il servizio*/
  @CodiceFiscale varchar(16), /*Codice fiscale della persona a cui verrà
intestato del servizio*/
  /*Utente società*/
/*Dati in USCITA*/
  @IDCliente int output /*Contiene l'IDCliente assegnato a questo cliente*/
As
 DECLARE
  @IDOperatore int /*Contiene l'ID di riconoscimento dell'operatore che
effettua l'inserimento*/
BEGIN TRANSACTION
 /*Imposta il valore di ID operatore*/
 SELECT @IDOperatore = 190
 /*Imposta l'ID Cliente da assegnare a questo utente*/
 SELECT @IDCliente = IDCliente FROM Contatori
 /*Inserisce i dati del cliente nel database*/
 INSERT INTO Clienti (IDCliente,
       OperatoreCaricamento,
       Nome,
       Cognome,
       Indirizzo,
       IDCitta,
       Cap,
       TelefonoAbitazione,
       TelefonoCellulare,
       CodiceFiscale)
       VALUES
      (@IDCliente,
       @IDOperatore,
       @Nome,
       @Cognome,
       @Indirizzo,
       @IDCitta,
       @Cap,
       @TelAbitazione,
       @TelCellulare,
       @CodiceFiscale)
COMMIT TRANSACTION
Arrivederci!!
---------------------------------------------------------
Simone Severa
Uninet Technical Support
Via Cornelia, 498 00166 Roma, Italy
Office Phone +39 6 61114300
Fax. +39 6 61114202
E-Mail. 
sse...@uni.net
---------------------------------------------------------

Simone,
    io uso ADO 2.1 via MTS e non creo i parametri ma semplicemente passo
loro i valori. Questo causa un po' di round-trip tra server MTS e Sever SQL,
ma visto che si parlano a 100 Mbit switchati me ne frego.
es.
    Dim adoCommand As ADODB.Command
    On Error GoTo AihAihAih
    Set adoCommand = CreateObject("ADODB.Command")
    adoConnection.Open
    With adoCommand
        .ActiveConnection = adoConnection
        .CommandType = adCmdStoredProc
        .CommandText = "pSetVariazioniNucleo"
        .Parameters("@IdNucleoFamigliare") = nIdNucleo
        .Parameters("@IdPersonaFisica") = nIdPersonaFisica
        .Parameters("@DataVariazioneComposizione") = dEffettiva
        .Parameters("@DataVariazioneCanone") = dCanone
        If nIdXVariazione <> 0 Then
            .Parameters("@IdXVariazioneNucleo") = nIdXVariazione
        End If
        .Execute
    End With
bye
Alessandro Scardova
scar...@tin.it
http://space.tin.it/computer/ascardov/

...


Simone, il valore di ritorno lo si ottiene dopo l'execute.
    With adoCommand
        .ActiveConnection = adoConnection
        .CommandType = adCmdStoredProc
        .CommandText = "pGetIdPersonaFisicaRiferimentoNucleo"
        .Parameters("@IdNucleoFamigliare") = nIdNucleo
        .Execute
        GetIdReferenteNucleo = .Parameters("@IdPersonaFisicaRiferimento")
    End With
bye,
Alessandro Scardova
scar...@tin.it
http://space.tin.it/computer/ascardov/
P.S.
Se Usi SQL 7 conviene mettere SET NOCOUNT ON all'inizio della Procedure.