|
Command
Proprieta'
ActiveConnection,
CommandTimeout,
CommandText,
CommandType,
Prepared,
State
Metodi
Execute,
CreateParameter,
Cancel
|
|
L'oggetto Command consente
l'invio di comandi al database, i comandi possono essere query, ma non
sono limitati a questo. Possono essere preparazione di query ed
associazioni di parametri con stringhe di query. Il linguaggio attuale
di comando che e' supportato e' strettamente dipendente dal driver in
uso, la maggioranza dei database relazionali che sono supportati
utilizzano una qualche variante dello standard SQL92.
L'oggetto Command puo' sia accedere
ad una nuova connessione o utilizzare una connessione esistente per
eseguire le proprie operazioni, dipende da cosa viene specificato nella
proprieta'
ActiveConnection.
Se tale proprieta' e' impostata su una connesione esistente, tale
connessione verra' utilizzata, se tale proprieta' viene impostata
su una stringa di connessione, verra' usata tale stringa per
attivare una nuova connessione.
L'esecuzione di stringhe di query puo' generare uno o piu'
RecordSet
come risposta, oppure puo' non ritornare nessun
RecordSet.
Una query puo' essere specificata impostando la proprieta'
CommandText. Una query in genere puo' essere una
istruzione SQL standard di manipolazione del database o il richiamo
di una Stored Procedure.
Il tipo di query viene specificato impostando la proprieta'
CommandType
con una delle apposite costanti.
Quando il comando e' un comando SQL, deve essere utilizzata
adCmdText.
Se viene usata adCmdStoredProc, l'oggetto Command esegue la
query mediante la sequenza ODBC {call procedure=name}.
Se si specifica adCmdTable, la query si suppone che sia il
nome di una tabella, in questo caso la query viene convertita in
SELECT * FROM
per reperire tutte le righe della tabella.
Specificando adCmdUnknown, l'oggetto Command cerchera' di
stabilire il tipo di query inviato, questo potrebbe portare ad un
degrado delle prestazioni.
E' possibile utilizzare la proprieta'
Prepared,
per effettuare la "preparazione" delle query prima della vera e
propria esecuzione. In questo modo prima della esecuzione viene
preparato il Piano di Query, questo migliora sensibilmente
le prestazini della query se la stessa deve essere eseguita piu' volte.
La proprieta'
Prepared
diviene utile anche quando si deve eseguire ripetutamente
una query con parametri, modificando i valori dei parametri ogni
volta. L'oggetto
Parameter
puo' essere creato attraverso il metodo
CreateParameter.
Questo esempio esegue una semplice SELECT che ritorna un recordset:
Dim Cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
' Use a connection string or a Connection object.
Cmd.ActiveConnection = "DSN=pubs;UID=sa"
Cmd.CommandText = "select * from titles"
Cmd.CommandTimeout = 15
Cmd.CommandType = adCmdText
Set rs = Cmd.Execute()
rs.Close
Questo esempio esegue una stored procedure che non ritorna
un RecordSet.
Dim Cmd As New ADODB.Command
' Use a connection string or a Connection object.
Cmd.ActiveConnection = "DSN=pubs;UID=sa"
Cmd.CommandText = "myADOProc"
Cmd.CommandTimeout = 15
Cmd.CommandType = adCmdStoredProc
Cmd.Execute
Il nome della Stored Procedure e' "myAdoProc" ed e' inserito nella
proprieta' CommandText.
Torna alla mappa
|
|
Proprieta'
|
|
|
ActiveConnection |
Indica l'oggetto
Connection a cui appartiene attualmente
l'oggetto Command.
Impostazioni e valori restituiti
Imposta o restituisce un valore String contenente la definizione
per una connessione o un oggetto Connection. L'impostazione
predefinita e' un riferimento all'oggetto Null.
Osservazioni
Utilizzare la proprieta'
ActiveConnection per
determinare l'oggetto Connection tramite il quale l'oggetto
Command specificato verra' eseguito.
Se si cerca di richiamare il metodo
Execute in un oggetto Command
prima di aver impostato questa proprieta' a un oggetto Connection
aperto o una stringa di connessione valida, verra' restituito
un errore.
Microsoft Visual Basic
L'impostazione della proprieta'
ActiveConnection su
Nothing implica l'eliminazione
dell'associazione tra l'oggetto Command e l'oggetto Connection
corrente e il conseguente rilascio da parte del provider di
eventuali risorse associate della fonte dati. Sara' quindi
possibile associare l'oggetto Command allo stesso oggetto
Connection o a un altro oggetto. Alcuni provider consentono di
modificare l'impostazione della proprieta' da un oggetto
Connection a un altro senza impostare dapprima la proprieta'
su Nothing.
Se l'insieme
Parameters
dell'oggetto Command contiene parametri forniti dal provider e
se si imposta
ActiveConnection su
Nothing o su un
altro oggetto Connection, l'insieme verra' cancellato. Se si
inseriscono oggetti
Parameter creati manualmente
nell'insieme Parameters dell'oggetto Command e si imposta la proprieta'
ActiveConnection su
Nothing o su un altro
oggetto Connection, l'insieme Parameters non verra' modificato.
La chiusura di un oggetto Connection a cui e' associato un
oggetto Command consente di impostare la proprieta'
ActiveConnection su
Nothing.
Impostando questa proprieta' su un oggetto Connection
chiuso, verra' restituito un errore.
|
| CommandTimeout |
Indica il tempo da attendere prima di ritornare un errore di
"tempo scaduto per l'operazione". Il valore deve essere indicato
in secondi. Il default e' di 30 secondi.
|
|
CommandText |
Imposta o restituisce un valore String contenente un comando di
provider, quale un'istruzione SQL, un nome di tabella o una
chiamata a una stored procedure. Il valore predefinito e' "",
ovvero una stringa di lunghezza zero.
Se la proprieta'
Prepared e' impostata su True e
l'oggetto Command e' legato a una connessione aperta durante
l'impostazione della proprieta' CommandText, quando verra' chiamato
il metodo Execute o Open ADO preparera' la query, vale a dire
una forma compilata della query memorizzata dal provider.
A seconda dell'impostazione della proprieta'
CommandType, ADO puo' modificare la
proprieta' CommandText. È possibile leggere la proprieta'
CommandText in qualsiasi momento per visualizzare il testo del
comando che verra' utilizzato da ADO durante l'esecuzione.
|
|
CommandType |
Indica il tipo di oggetto command, e' possibile utilizzare uno o
una combinazione di piu' dei valori seguenti:
- adCmdText
Definisce CommandText come la definizione testuale di un
comando o una chiamata di stored procedure.
- adCmdTable
Definisce CommandText come un nome di tabella le cui colonne
vengono tutte restituite tramite una query SQL generata
internamente.
- adCmdTableDirect
Definisce CommandText come un nome di tabella le cui colonne
vengono tutte restituite.
- adCmdStoredProc
Definisce CommandText come un nome di stored procedure.
- adCmdUnknown
Predefinita. Il tipo di comando della proprieta' CommandText
non e' conosciuto.
- adCommandFile
Definisce CommandText come il nome di file di un Recordset
che deve rimanere fisso.
- adExecuteNoRecords
Definisce CommandText come un comando o una stored procedure che
non restituisce alcuna riga, quale un comando che inserisce
solamente dati. Le righe trovate vengono scartate e non
restituite. Sempre associata a adCmdText o adCmdStoredProc.
Se il valore della proprieta'
CommandType corrisponde a
adCmdUnknown (valore
predefinito), e' possibile che si verifichi una riduzione delle
prestazioni in quanto ADO dovra' eseguire delle chiamate al provider
per determinare se la proprieta'
CommandText e' un'istruzione
SQL, una stored procedure o un nome di tabella. Se si conosce il
tipo di comando in uso, l'impostazione della proprieta'
CommandType indichera' il codice appropriato.
Se la proprieta' CommandType non corrisponde al tipo di comando
indicato nella proprieta' CommandText, si verifichera' un errore
quando si chiama il metodo Execute.
La costante
adExecuteNoRecords ottimizza
le prestazioni riducendo il carico di elaborazione interna.
Questa costante non e' mai isolata ma e' sempre associata a
adCmdText o
adCmdStoredProc (ad esempio,
adCmdText+adExecuteNoRecords).
Con il metodo Recordset.Open non e' possibile utilizzare la costante
adExecuteNoRecords ne'
un oggetto Command. Qualora ciò si verificasse, verrebbe segnalato
un errore.
|
| Prepared |
Indica se salvare o meno una versione compilata di un comando
prima dell'esecuzione.
Valori possibili: TRUE o
FALSE.
Osservazioni
Utilizzare la proprieta' Prepared se si desidera che il provider
salvi una versione preparata o compilata della query specificata
nella proprieta' CommandText prima di eseguire per la prima volta
un oggetto Command. Questa operazione rallenta la prima
esecuzione del comando, ma una volta compilato il comando, il
provider ne utilizzera' la versione compilata per le esecuzioni
successive, consentendo in tal modo di ottenere un miglioramento
generale delle prestazioni.
Se la proprieta' e' impostata su False, il provider eseguira'
direttamente l'oggetto Command senza crearne una versione
compilata.
Se il provider non supporta la preparazione dei comandi, e'
possibile che venga restituito un errore quando la proprieta'
viene impostata su True. Se non viene restituito alcun errore,
la richiesta di compilazione del comando verra' ignorata
e la proprieta' Prepared verra' impostata su False.
|
| State |
La proprieta' State puo' essere utilizzata per determinare lo
stato corrente di un determinato oggetto in qualsiasi momento. Si
tratta di una proprieta' di sola lettura.
- adStateClosed
Predefinita. L'oggetto e' chiuso.
- adStateOpen
L'oggetto e' aperto.
|
|
|
Metodi
|
|
| Execute |
Esegue la query, l'istruzione SQL, la stored procedure o il testo
specifico del provider.
Sintassi
Per una stringa di comando che non restituisce valori:
Command.Execute Record, Parametri, Opzioni
Per una stringa di comando che restituisce righe:
Set recordset = Command.Execute (Record,
Parametri,
Opzioni)
In questo caso la Execute costruisce e ritorna un oggetto di tipo
Recordset.
Parametri
- Record
Variabile Long a cui il provider restituisce il numero di record
interessati dall'operazione (opzionale).
- Parametri
Array di valori dei parametri passati con un'istruzione SQL
(opzionale). I parametri di output non restituiranno valori
corretti quando vengono passati in questo argomento.
- Opzioni
Valore Long che indica come il provider deve valutare l'argomento
Comando (opzionale). Può essere una delle seguenti costanti:
- adCmdText
Indica che il provider deve valutare Comando come una
definizione in formato testo di un comando.
- adCmdTable
Indica che ADO deve generare una query SQL per restituire tutte
le righe della tabella indicata in Comando.
- adCmdTableDirect
Indica che il provider deve restituire tutte le righe della
tabella indicata in Comando.
- adCmdTable
Indica che il provider deve valutare Comando come un nome di
tabella.
- adCmdStoredProc
Indica che il provider deve valutare Comando come una stored
procedure.
- adCmdUnknown
Indica che il tipo di comando nell'argomento Comando non e'
conosciuto.
- adExecuteAsync
Indica che il comando deve essere eseguito in modalita'
asincrona.
- adFetchAsync
Indica che sulle righe rimanenti dopo la quantita' iniziale
specificata nella proprieta' CacheSize deve essere eseguito
il fetch in modalita' asincrona.
Utilizzando il metodo Execute su un oggetto Command si esegue la
query specificata nella proprieta'
CommandText dell'oggetto.
Se la proprieta' CommandText
specifica una query che restituisce righe, qualsiasi risultato
generato dall'esecuzione verra' memorizzato in un nuovo oggetto
Recordset. Se il comando non e' una query che restituisce
righe, il provider restituira' un oggetto Recordset chiuso. In
alcuni linguaggi applicativi e' possibile ignorare tale valore
restituito se non si desidera alcun Recordset.
Se la query ha dei parametri, verranno utilizzati i valori correnti
dei parametri dell'oggetto Command, a meno che questi non vengano
sostituiti dai valori dei parametri passati con la chiamata del
metodo Execute. È possibile ignorare un sottoinsieme di parametri
omettendo i nuovi valori per alcuni dei parametri quando si chiama
il metodo Execute. L'ordine in cui i parametri vengono specificati
e' lo stesso ordine in cui vengono passati dal metodo. Se ad esempio
vi sono quattro o piu' parametri e si desidera passare nuovi valori
solo per il primo e il quarto parametro, sara' necessario passare
Array(var1,,,var4) come argomento Parametri.
Nota I parametri di output non restituiscono valori corretti
quando vengono passati nell'argomento Parametri.
L'oggetto Recordset restituito e' sempre un cursore a scorrimento
in avanti di sola lettura. Se e' necessario un oggetto Recordset
con piu' funzionalita', creare innanzitutto un oggetto Recordset
con le impostazioni delle proprieta' desiderate, quindi utilizzare
il metodo Open dell'oggetto Recordset per eseguire la query e
restituire il tipo di cursore desiderato.
|
|
CreateParameter |
Crea un nuovo oggetto
Parameter con le
proprieta' specificate.
Sintassi
Set parametro=comando.CreateParameter( Nome,
Tipo,
Direzione,
Dimensione,
Valore )
Parametri
- Nome
Elemento String che rappresenta il nome dell'oggetto Parameter
(opzionale).
- Tipo
Valore Long che specifica il tipo di dati dell'oggetto Parameter
(opzionale).
- Direzione
Valore Long che specifica il tipo di oggetto Parameter
(opzionale).
- Dimensione
Valore Long che specifica la lunghezza massima per il valore
del parametro in caratteri o byte (opzionale).
- Valore
valore da assegnare al parametro (opzionale).
Osservazioni
Utilizzare il metodo CreateParameter per creare un nuovo oggetto
Parameter con il nome, il tipo, la direzione, la dimensione e il
valore specificati. Qualsiasi valore passato negli argomenti viene
scritto nelle proprieta' Parameter corrispondenti.
Questo metodo non accoda automaticamente l'oggetto Parameter
all'insieme Parameters di un oggetto Command. In questo modo,
e' possibile impostare ulteriori proprieta' i cui
valori verranno convalidati da ADO quando si accoda l'oggetto
Parameter all'insieme.
Se si specifica un tipo di dati a lunghezza variabile nell'argomento
Tipo, sara' necessario passare un argomento Dimensione o impostare
la proprieta' Size dell'oggetto Parameter prima di accodarlo
all'insieme Parameters, altrimenti si verifichera' un errore.
|
| Cancel |
Annulla l'esecuzione di una chiamata asincrona del metodo Execute
in attesa.
Sintassi
connection.Cancel
Utilizzare il metodo Cancel per terminare l'esecuzione di una
chiamata asincrona del metodo Execute, ovvero il metodo chiamato
con l'opzione adConnectAsync, adExecuteAsync o adFetchAsync.
Se l'opzione adRunAsync non e' stata utilizzata nel metodo che si
sta tentando di terminare, Cancel restituira' un errore in fase di
esecuzione.
|
|