views

Mattepuffo's logo
GridView sorting in C#

GridView sorting in C#

Ed eccoci all'ultima parte dei tre articoli dedicati alla GV da code-behind (qui i primi due articoli: primo, secondo).

Qua vi parlo dell'implementazione del meccanismo di sorting.

Se si vuole usare il code-behind per la GV non basta attivare il sorting, ma bisogna scrivere il metodo a mano.

Prima di tutto dobbiamo fare alcune modifiche alla GV che adesso richiede due parametri:

protected void decoderViewSource(string sortExpr, string sortDir)
{

SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString);
String queryString = "SELECT * FROM siti";
try
{
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(queryString, conn);
DataSet ds = new DataSet();
adapter.Fill(ds);
DataView dv = new DataView();
dv = ds.Tables[0].DefaultView;
if (sortExpr != string.Empty)
{
dv.Sort = string.Format("{0} {1}", sortExpr, sortDir);
}
DecoderView.DataSource = dv;
DecoderView.AutoGenerateColumns = false;
DecoderView.AutoGenerateSelectButton = true;
DecoderView.AllowSorting = true;
DecoderView.AllowPaging = true;
DecoderView.CssClass = "grid";
DecoderView.PageSize = int.Parse(ddlPagine.SelectedValue);
DecoderView.PagerSettings.Visible = false;
DecoderView.DataBind();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
conn.Close();
}
}

L'unica differenza sta nei due parametri string.

Mattepuffo's logo
MySQL Stored Procedure

MySQL Stored Procedure

Dopo aver parlato delle viste affronto il "problema" delle Stored Procedure (SP) in MySQL.

Le SP portanto diversi vantaggi, tra i quali la velocità di esecuzione spicca sugli altri.

Le SP sono più veloci in quanto rimangono nella cache del server e quindi sono più veloci se devono essere richiamate spesso.

Inoltre tutta la logica di esecuzione è lasciata al db separando così i dati dal codice (PHP, Java, C#, ecc....vale per tutti).

I maggiori punti a sfavore derivano dal fatto che non è sempre facile scrivere un layer di astrazione nei vari linguaggi e che non è possibile effetturane il debug.

Per quanto riguarda il primo punto, ciò deriva dal fatto che MySQL non ha una stretta interazione come succede con SQL Server e Asp.NET.

Comunque vediamo come gestire le SP.

Prima di tutto la creazione; connettiamoci al db e scriviamo:

mysql> DELIMITER //
mysql> CREATE PROCEDURE getBook()
-> BEGIN
-> SELECT * FROM book;
-> END//
Query OK, 0 rows affected (0.02 sec)

mysql> DELIMITER ;

DELIMITER // serve per cambiare il delimitatore di fine comando; in questo caso ho impostato // ma può essere uno qualsiasi.

Alla fine ho reimpostato quello tradizionale (il ;).

Si tratta di una vera e propria istruzione; sembra una funziona in VB......

Le istruzioni che ci interessano vanno dentro il blocco BEGIN-END.

getBook() è il nome che gli ho assegnato io; le parenetsi sono obbligatorie proprio come in una funzione/metodo in un linguaggio, e questo perchè è possibile passrgli dei parametri (li vedremo dopo).

Mattepuffo's logo
Le viste in MySQL

Le viste in MySQL

In questi giorni ho avuto a che fare con le viste in MySQL.

Detta in parole povere una view è una tabella virtuale formata dal risultato di una SELECT.

Una volta salvata una view è simile a una classica tabella, formata da righe e colonne ed è interrogata come una normale tabella.

L'utilizzo dell views porta con se diversi vantaggi:

  • semplifica query complesse
  • limita l'accesso ad alcuni dati che si vogliono tenere nascosti
  • extra security derivata dal fatto che la view è una tabella a sola lettura; gli utenti possono solo visualizzare i dati
  • ecc

Creare una view non è difficile.

La sintassi genereale è questa:

CREATE
[ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]

VIEW [database_name]. [view_name]

AS
[SELECT statement]

Con MERGE la SELECT viene "mescolata" con l'istruzione che richiama la vista stessa.

Con TEMPTABLE la SELECT relativa alla vista viene utilizzata per creare una tabella temporanea, sulla quale viene poi eseguita l'istruzione richiesta.

Con UNDEFINED sceglierà MySQL cosa usare, ed in genere preferisce MERGE.

UNDEFINED è l'impostazione di default.

Come nome potete impostare sia il nome col prefisso del nome del db, che senza.

Infine abbiamo l'istruzione SELECT che segue alcune regole:

  • non possono essere incluse subquery
  • non possono essere usate variabili
  • non possono essere usati prepared statement
  • non possono essere usate altre view o tabella temporenee
  • non possono essere associate a triggers

Vi mostro la mia view:

CREATE VIEW bookv

AS 

SELECT name, author_name, editor_name, price, isbn, note

FROM book

INNER JOIN author ON book.author_id=author.author_id

INNER JOIN editor ON book.editor_id=editor.editor_id;

Come potete vedere nulla di complicato e se andate a controllare le tabelle del vostro db comparirà anche la view:

mysql> show tables;
+-------------------+
| Tables_in_library |
+-------------------+
| author            |
| book              |
| bookv             |
| editor            |
+-------------------+

A questo punto vi basterà interrogare la view per recuperare quei dati:

SELECT * FROM bookv;

VISTE AGGIORNABILI