3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Esecuzione di query nel database
Attraverso l'oggetto Command è possibile eseguire statement SQL nel database.
Le query che non restituiscono nessun risultato, ma che hanno come scopo quello di modificare il contenuto del database, vengono definite come query DML (Data Manipulation Language). A questo gruppo di query fanno parte istruzioni del tipo UPDATE, INSERT INTO, DELETE.
Le query che invece modificano la struttura del database, vengono definite come query DDL (Data Definition Language) ed a questo gruppo di query fanno parte istruzioni del tipo CREATE TABLE, DROP TABLE, altER VIEW.
Nel frammento di codice riportato di seguito, verrà creato un oggetto Command utilizzando il metodo CreateCommand dell'oggetto Connection. E' inoltre possibile creare un oggetto Command utilizzando uno dei costruttori disponibili:
...
cn.Open
Dim cmd As OleDbCommand = cn.CreateCommand
cmd.CommandText = "UPDATE tabella SET nomecampo = 'valore'"
cmd.ExecuteNonQuery()Il metodo ExecuteNonQuery dell'esempio precedente non restituisce alcun risultato, perchè va utilizzato per query di tipo DML e DDL.
Talvolta però si ha la necessità di stabilire se la query ha modificato effettivamente la riga dalla tabella ed il metodo in questione restituisce il numero di righe influenzate dalla query, come variabile intera.
Nel frammento di codice riportato di seguito è mostrato come gestire il valore di ritorno del metodo ExecuteNonQuery:
...
cn.Open
Dim cmd As OleDbCommand = cn.CreateCommand
cmd.CommandText = "UPDATE tabella SET nomecampo = 'valore'"
'variabile che contiene il valore di ritorno del metodo
Dim result As Integer = cmd.ExecuteNonQuery()
If result = 0 Then
Response.Write("Update fallito!")
Else
Response.Write("Sono stati aggiornati " & result & " record(s)!")
End IfL'oggetto Command espone anche un metodo ExecuteScalar , necessario per recuperare, attraverso una query al database, un singolo valore.
Nel frammento di codice riportato di seguito, è mostrato usare il metodo ExecuteScalar:
cn.Open
Dim cmd As OleDbCommand = cn.CreateCommand
cmd.CommandText = "SELECT COUNT(*) FROM tabella"
dim count As Integer = cmd.ExecuteScalar()Questo metodo va utilizzato quando si deve prendere la prima riga della prima colonna della query, ad esempio in query di aggregazione.
Come il recordset di ADO? Il DataReader!
L'oggetto DataReader è stato progettato per comunicare direttamente con l'origine dati.
Essendo di dimensioni ridotte è molto efficiente e, considerando l'accesso diretto al cursore firehose, consente di esaminare i risultati, in modalità di sola lettura, in un modo estremamente rapido.
Per creare un oggetto DataReader è necessario chiamare il metodo ExecuteReader di un oggetto Command. Cosa importante da tenere presente è che la prima riga dei risultati non sarà disponibile fino alla chiamata del metodo Read . Quindi la prima volta che si chiama il metodo Read, il DataReader si posizionerà sulla prima riga dei risultati e così via per scorrere tutte le righe disponibili.
Nel frammento di codice riportato di seguito è mostrato come creare un oggetto DataReader:
cn.Open
Dim sql = "SELECT * FROM tabella"
Dim cmd As New OleDbCommand(sql, cn)
Dim objDataReader As OleDbDataReader = cmd.ExecuteReader
While objDataReader.Read
Response.Write(objDataReader("nomecampo"))
End While
objDataReader.Close()E' importante sottolineare che il metodo Read restituisce anche un valore di tipo Boolean, quindi se tale valore è False significa che è stato raggiunto la fine del resultset. Di importanza fondamentale è che la chiusura di un oggetto DataReader avvenga il più velocemente possibile, anche perché un oggetto DataReader aperto è considerato bloccato e tiene aperta, tra l'altro, la connessione fisica verso la base dati.
Query parametriche
L'oggetto Parameter di ADO.NET ci consente di memorizzare le informazioni del parametro, da aggiungere ad un oggetto Command.
L'uso di questo oggetto è fondamentalmente quello di creare query parametriche, un ottimo supporto per difendere un'applicazione dagli attacchi di SQL Injection, che puntano ad eseguire codice all'interno delle nostre applicazioni passando tra i parametri codice SQL formattato ad hoc.
Nel frammento di codice riportato di seguito è mostrato come implementare questo oggetto:
cn.Open
Dim sql As String = "SELECT * FROM users WHERE UserID = ? AND Password = ?"
Dim cmd As New OleDbCommand(sql, cn)
' specifico l'UserID
cmd.Parameters.Add("@UserID", OleDbType.WChar, 8)
cmd.Parameters(0).Value = "userid"
' specifico la password
cmd.Parameters.Add("@Password ", OleDbType.WChar, 8)
cmd.Parameters(1).Value = "password"
' eseguo la query
Dim objDataReader As OleDbDataReader = cmd.ExecuteReader3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Contenuti dell'articolo
Per inserire un commento, devi registrarti alla nostra community.








Difficoltà
Utilità
Stampa
Download 


