Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Helpers per lanciare sp sotto SQL Server

Ciao....una settimana fa Luca Menegotto mi aveva gentilmente postato del
codice....
non ho avuto modo di provarlo, purtroppo, però questa mattina in
metropolitana.....me lo sono letto per bene.....ho qualche dubbio che magari
lui a qualcun'altro potrà chiarirmi....
non riporto tutto il codice, ma solo la parte "incriminata".....
dunque, concettualmente si tratta di due Function: ExecuteStoredProc e
OpenStoredProcRS.
La seconda è una derivata dalla prima, e comunque la parte incriminata è la
stessa, per cui....
il blocco è questo:
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
si tratta del blocco di codice che compila i parametri da passare alla sp
sul server.
non capisco però......io ho dovuto fare il .Append di ciascun parametro.
Invece dal codice qui sopra tu non lo fai, e in più non consideri il .Type,
il .Name, il .Size di ogni parametro. imposti solo il .Value e basta.
ma la cosa che mi turba di più è che tu non li aggiungi mai all'oggetto
ADODB.Command.
tu scandisci l'array arrayParameters e prendi per buono che la collection
Parameters dell'oggetto ADODB.Command sia già popolato.
sbaglio oppure non ho capito qualcosa?
non è che questo codice tu lo usavi con sqlserver 7 e adesso con il 2000 non
va bene più?
grazie per i chiarimenti che potrete darmi.....
good coding!!!
-- 
Alletun
"Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King

va bene piů?
Funziona correttamente anche con SQLServer 2000. Ho un servizio o due
che girano da un po' e che usano Execute.... in modo abbastanza
intensivo.
Ciao!
Luca
--
Ciao!
Luca Menegotto

 intensivo.
grazie i chiarimenti, sei gentilissimo.....


 bello e impostato secondo quanto indicato nella SP stessa.
Ma quali sono questi vettori dei parametri ?
Parli della collection Parameters ?
Perchè se così fosse .. dopo l'assegnazione della proprietà CommandText,
potrei verificare Command.Parameters.Count>1 (RETURN_VALUE escluso
ovviamente) .. e questo non credo sia verificato.
Io ho sempre eseguito l'append con il createparameter, per cui se fosse come
dici tu, mi ritroverei il doppio dei parametri .. o sbaglio ?
e poi in quale momento vienepopolata la collection parameters ? quando
assegno il commandtext ? . mi pare un po' strano questo meccanismo !
(il tutto è da leggere senza nessuna sorta di polemica ne di sfida ecc... ma
solo con grande curiosità)
Saluti

solo con grande curiosità)
Il fatto e' che purtroppo questa e' roba scritta parecchi anni fa.
Come tutte le cose sedimentate, so che funziona e in base a che
principio lo fa. Non ho piu' riferimenti pero' alla documentazione che
ha supportato tutto questo. Magari adesso faccio una ricerca in MSDN e
poi ti do i risultati!
 
--
Ciao!
Luca Menegotto

 Saluti
anche io la penso come te.....però mi sa che ha ragione lui.
io qua non ho sqlserver nè msde, però voglio verificarlo....
secondo dipende dall'ordine di come si impostano le proprietà......
il fatto di mettere il CommandText magari effettivamente assegna alla
collection Parameters tutto regolarmente.
Magari Append non duplica i parametri se hanno lo stesso Name, e questo è il
motivo per cui non ti ritrovi il doppio dei parametri......
boh, spero di poter controllare meglio.....oggi non credo....
c'è troppo sole per stare davanti al pc!!! :-)))



CUT
Grazie Luca .. .. non ti preoccupare per la documentazione ... mi fido di te
.. al massimo se hai sbagliato so dove venire a prenderti :)
Scherzi a parte .. mi conviene rivedere il codice relativo ai Command,
perchè penso a vari errori che possono intercorrere :
se automaticamente viene popolata la collection Parameters .. quando io
faccio l'append, perchè non mi vengono restituiti errori sul nome del
parametro (Key della collection) ?
cioè se già esiste nella collection parameters la Key "A" (perchè viene
creato automaticamente), quando io faccio il mio bravo .Append
.CreateParameter("A" ...), andrei a duplicare la key "A"; invece nessun
errore.
E se inverto l'ordine dei parametri ?
Come mai ? (comunque ora faccio qualche prova) poi ti faccio sapere.
Grazie ancora


wrote:
<snip>
Allora: Q185125, Q174223. In questi articoli si fa riferimento al
metodo <Command>.Parameters.Refresh per popolare i parametri una volta
foraggiato adeguatamente l'oggetto Command.
Dopodiche' avevo trovato in un articolo, che in questo momento non
trovo, che faceva vedere come la collection 'Parameters' venisse
implicitamente popolata con i parametri prelevati dal server (pero'
non ricordo se fosse generico o per il data provider per SQL Server). 
Ho provato a riordinare i metodi secondo quell'articolo e a rimuovere
il refresh. Et volila!!! 
NOTA: Quello che tu fai e' perfettamente legittimo, visto che ci sono
innumerevoli articoli che fanno la stessa cosa. E' che a me piace
giocare col debugger e vedere di nascosto l'effetto che fa.... ;-)


 
Siccome anche per me il tuo metodo e' una novita' e siccome credo di 
aver seguito, come gli altri, le indicazioni di msdn, dei libri su ADO e 
  degli esempi che si trovano in giro, forse la differenza piu' 
importante e' scritta qui:
Metodo Append (ADO)
"Descrivendo il parametro autonomamente, č possibile ridurre il numero 
di chiamate al provider e di conseguenza migliorare le prestazioni 
quando si utilizzano stored procedure o query con parametri. Č tuttavia 
necessario conoscere le proprietą dei parametri associati alla stored 
procedure o alla query con parametri che si desidera chiamare. 
Utilizzare il metodo CreateParameter per creare gli oggetti Parameter 
con le proprietą impostate adeguatamente e utilizzare il metodo Append 
per aggiungerli all'insieme Parameters. In questo modo, č possibile 
impostare e restituire i valori dei parametri senza dovere chiamare il 
provider per le informazioni necessarie. Se si chiama un provider che 
non fornisce informazioni relative ai parametri, sarą necessario 
compilare manualmente l'insieme Parameters utilizzando questo metodo per 
potere utilizzare i parametri."
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

Metodo Append (ADO)
Io sono perfettamente d'accordo. Se non che a me serviva un metodo
semplice, veloce e che funzionasse in modo sufficiente. Considera che
in media le applicazioni su database non sono generalmente
time-critical, e quindi anche se si perde un decimo di secondo per il
popolamento della collection, non e' poi 'sto danno. Infine, vero,
magari non e' generale, pero' io ho sempre e solo lavorato con
SQLServer........
:))))
--
Ciao!
Luca Menegotto

 
Il mio appunto non voleva essere una critica, ma una spiegazione del 
perche' MS spinga (nella guida, negli esempi) verso il metodo "standard".
Ora che, grazie a te, so che esistono 2 metodi usero' il piu' 
utile/comodo a seconda della necessita'.



Nonono, non volevo assolutamente fare l'offeso, e se hai capito il
contrario mi scuso. E' solo che facevo considerazioni circa il fatto
che, se molti articoli usano la tecnica della creazione dei parametri,
altrettanti usano la tecnica del Refresh (che io ho trovato essere
implicita utilizzando un certo ordine di chiamata dei parametri e
usando il data provider OLEDB). Insomma, secondo me ciascuno fa un po'
a modo suo in base all'opportunità, al contesto, a come gli girano in
quel giorno, and so on.... ;-)
--
Ciao!
Luca Menegotto