Newsgroup: it.comp.lang.visual-basic
Titolo: [?] ADODB.Parameter o semplice .Execute

Uff, ringrazio ancora per le dritte sulle sp che mi sono state date l'altro
giorno....
ora è tutto ok e ho sistemato tutto.
adesso mi trovo nella situazione di dover lanciare questa benedetta sp dal
mio applicativo vb.
la sp si chiama "generaProgrammaSettimanale" e accetta diversi parametri
@DataInizio smalldatetime
@DataFine smalldatetime
@ServiziEsterni varchar
@ConNote varchar
allora, ho un dubbio. Che differenza c'è tra lanciare questa sp facendo:
1) Metodo Execute di ADODB.Connection
Archivio.Execute "generaProgrammaSettimanale "
e concatenando i parametri alla stringa
2) ADODB.Command e ADODB.Parameter
non sto qui a postare il codice, non ce l'ho sotto mano, ma è più lungo e
poco leggibile.
Per ogni parametro, devo impostare nome, tipo, size, valore, aggiungerlo
all'ADODB.Command e solo in seguito invocare il metodo .Execute
dell'ADODB.Command
la sp sopra in realtà ha molti più parametri ed è veramente tedioso star lì
a scriverli uno alla volta, indicando per ciascuno di essi le proprietà,
quando potrebbe essere....come dire.....inutile? no????
non capisco quale delle due strade conviene percorrere......
c'è un motivo di prestazioni/leggibilità......qualsiasi cosa......che faccia
pendere una cosa o l'altra?
boh, good coding!!!
-- 
Alletun
"Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King

 ha scritto nel messaggio
news:c5qlkv$4psva$1...@ID-134521.news.uni-berlin.de...

Entrambi i metodi sono egualmente prestanti; con il metodo execute
dell'oggetto connection però non sei in grado di leggere parametri di output
(a parte il RecordSet restituito); che io sappia, l'unico modo per leggere
parametri di output è quello di passara attraverso un command.
Un piccolo appunto sulla definizione dei parametri di un oggetto command :
quando definisci i parametri (con Command.Parameters.Append) è necessario
mantenere l'ordine con cui essi sono definiti nella stored P. Il nome del
parametro può anche non coincidere .. esempio
Create StoredProcedure Pippo
(@A Int, @B nvarchar(10))
As ....
Nel codice
With Cmd
    ....
    .Parameters.Append .CreateParameter("A",adInteger,,, <Valore>)
    .Parameters.Append .CreateParameter("B",advarchar,, 10, <Valore>)
^così funziona^
invece così no ...
With Cmd
    ....
    .Parameters.Append .CreateParameter("B",advarchar,, 10, <Valore>)
    .Parameters.Append .CreateParameter("A",adInteger,,, <Valore>)
^così funziona^
Ti direbbe che il tipo di dati non è coerente
Il nome del parametro ADO non deve obbligatoriamente coincidere con il nome
del parametro della SP, perchè per ADO, tale nome, rappresenta la Key di una
collection .. è l'ordine con cui fai l'append che crea l'associazione tra i
parametri (ADO-StoredP)
Saluti

 parametri di output è quello di passara attraverso un command.
Dubbio: il command restituito non e' in entrambi i casi un array 
contenente i parametri (e quindi anche i parametri di output)?
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

mio applicativo vb.
Ciapa qui un paio di routinette, estratte da una mia antichissima
libreria di helpers per ADO (che ho notato essere ancora sul sito
comune, anche se in versione antica... :-O )
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''  ExecuteStoredProc
''  Helper per l'esecuzione di una stored procedure. I parametri
''  vanno indicati attraverso arrayParameters e arrayValues,
''  rispettivamente destinati a contenere il nom dei parametri e i
''  valori in essi contenuti. L'array dei valori viene anche
''  utilizzato per conservare i valori di ritorno dei parametri
''  indicati come di output nella stored procedure
''
Public Function ExecuteStoredProc(cnsApp As ADODB.Connection, _
                                  strStoredProcedure As String, _
                                  Optional arrayParameters As Variant
= Null, _
                                  Optional arrayValues As Variant =
Null, _
                                  Optional ByVal iTimeout As Integer =
-1) As Long
 
    Dim cmdApp As ADODB.Command
    Dim iApp As Integer
    If Not IsNull(arrayParameters) Then
        If LBound(arrayParameters) <> LBound(arrayValues) Or _
           UBound(arrayParameters) <> UBound(arrayValues) Then
            Err.Raise vbObjectError + 1, "OpenStoredProc", _
                "Numero parametri errato"
        End If
    End If
 
    Set cmdApp = New ADODB.Command
 
    cmdApp.ActiveConnection = cnsApp
    cmdApp.CommandType = adCmdStoredProc
    cmdApp.CommandText = strStoredProcedure
    If iTimeout > 0 Then
        cmdApp.CommandTimeout = iTimeout
    Else
        cmdApp.CommandTimeout = 0
    End If
 
    ''  compilazione dei parametri
    ''  nota: solo i parametri input e input/output
    If Not IsNull(arrayParameters) Then
        For iApp = LBound(arrayValues) To UBound(arrayValues)
            With cmdApp.Parameters(arrayParameters(iApp))
                If .Direction = adParamInput Or .Direction =
adParamInputOutput Then
                    .Value = arrayValues(iApp)
                End If
            End With
        Next
    End If
 
    cmdApp.Execute
 
    ExecuteStoredProc = 0
 
    ''  aggiornamento dei valori connessi ai parametri in output e
    ''  input/output
    If Not IsNull(arrayParameters) Then
        For iApp = LBound(arrayValues) To UBound(arrayValues)
            With cmdApp.Parameters(arrayParameters(iApp))
                If .Direction = adParamOutput Or .Direction =
adParamInputOutput Then
                    arrayValues(iApp) = .Value
                End If
            End With
        Next
    End If
 
    ''  riporto di un eventuale valore di ritorno
    For iApp = 0 To cmdApp.Parameters.Count - 1
        If InStr(cmdApp.Parameters(iApp).Name, "RETURN_VALUE") > 0
Then
            ExecuteStoredProc = cmdApp.Parameters(iApp).Value
            Exit For
        End If
    Next
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''  OpenStoredProcRS
''  Helper per l'esecuzione di una stored procedure che restituisce
''  un recordset.
''  I parametri vanno indicati attraverso arrayParameters e
arrayValues,
''  rispettivamente destinati a contenere il nom dei parametri e i
''  valori in essi contenuti.
''
Public Function OpenStoredProcRS(cnsApp As ADODB.Connection, _
                                 strStoredProcedure As String, _
                                 Optional arrayParameters As Variant =
Null, _
                                 Optional arrayValues As Variant =
Null, _
                                 Optional ByVal iTimeout As Integer =
-1) As ADODB.Recordset
    Dim cmdApp As ADODB.Command
    Dim iApp As Integer
    Dim rstApp As ADODB.Recordset
 
    If Not IsNull(arrayParameters) Then
        If LBound(arrayParameters) <> LBound(arrayValues) Or _
           UBound(arrayParameters) <> UBound(arrayValues) Then
            Err.Raise vbObjectError + 1, "OpenStoredProc", _
                "Numero parametri errato"
        End If
    End If
 
    Set cmdApp = New ADODB.Command
 
    cmdApp.ActiveConnection = cnsApp
    cmdApp.CommandType = adCmdStoredProc
    cmdApp.CommandText = strStoredProcedure 
    If iTimeout > 0 Then
        cmdApp.CommandTimeout = iTimeout
    Else
        cmdApp.CommandTimeout = 0
    End If
 
    ''  compilazione dei parametri
    ''  nota: solo i parametri input e input/output
    If Not IsNull(arrayParameters) Then
        For iApp = LBound(arrayValues) To UBound(arrayValues)
            With cmdApp.Parameters(arrayParameters(iApp))
                If .Direction = adParamInput Or .Direction =
adParamInputOutput Then
                    .Value = arrayValues(iApp)
                End If
            End With
        Next
    End If
 
    Set OpenStoredProcRS = cmdApp.Execute
End Function
Ciao!
Luca