Da qualche tempo nel poco tempo libero che ho lasciato al nuovo .NET 2.0, sto facendo varie prove cercando di sfruttare le novità presenti. Com ben spiegato nell'articolo di Daniele le novità sono tante, e il tutto sembra essere nato per facilitare il lavoro dei programmatori.
Grazie all'SQLDataSource è il GridView visualizzare il contenuto di una tabella del database senza scrivere una sola riga di codice. Per esempio:
<asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="Provider=..." providername="System.Data.OleDb" selectcommand="select * from tabella" /> <asp:gridview id="GridView1" datasourceid="SqlDataSource1" runat="server" />
Ma uno dei vantaggi davvero interessanti - come spiegato anche nell'articolo di Daniele - è la possibilità di inserire parametri all'interno della query SQL direttamente da parametri passati da una querystring, form, session o Control. Di natura malfidente avevo pensato a questa utility come una facilitazione, ma con pesanti controndicazioni come la possibilità di inserire parametri illegali come i caratteri "%" e "_" tanto amati dall'SQL. Se, per esempio, una nostra pagina accetta dei parametri passati come querystring:
http://nomesito/pagina2.aspx?ricerca=parola
E invece di "parola" inseriamo "%", la ricerca restituirà l'intero contenuto del database senza possibilità di controllo di questi caratteri o altri che permetterebbero accessi non desiderati ai nostri dati. Ero giunto alla conclusione che avrei dovuto, come al solito, utilizzare ancora all'interno dell'evento "Page_Load" un controllo di questi dati.
Mi sbagliavo. L'SqlDataSource ha degli eventi in cui è possibile effettuare tutti i controlli necessari. Non so se è la tecnica migliore - la documentazione a riguardo è al di sotto della scarsità più assoluta - ma ho risolto:
<asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="Provider=..." providername="System.Data.OleDb" selectcommand="select * from tabella" onselected="controlla"> ... parametri </asp:sqlDataSource>
Quindi è sufficiente scrivere il codice all'interno di questo evento:
void controla(object source, SqlDbDataSourceStatusEventArgs e) { OleDbCommand(OleDbCommand)e.Command; string cosa = a.Parameters[0].Value.ToString(); if (cosa.IndexOf("%")!=-1 || cosa.IndexOf("_")!=-1) e.Cancel=true; }
In questo caso, si verifica che il primo parametro passato non contenga i caratteri indicati, in caso siano presenti impostanto a "true" la proprietà "Cancel" impediamo che venga eseguita l'interrogazione al database. Comodo, no?
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Un po' di benchmark tra Linq, Entity Framework e Nhibernate, il 12 ottobre 2008 alle 14:46
- UrlRewriting con trabocchetti vari, l'11 dicembre 2007 alle 21:00
- Windows Forms - DataGridView e validazione, il 23 settembre 2007 alle 20:08
- ControlParameter e masterpage... bug?, il 23 dicembre 2006 alle 15:58
- Se Visual Studio 2005 non accetta più la tastiera, il 16 dicembre 2006 alle 20:45
- Service Pack 1 di Visual Studio 2005, il 16 dicembre 2006 alle 20:35