Visualizzare il comando SQL emesso da LinqToSQL

Da un po’ di tempo sono in contatto con Erik EJ per quanto riguarda SQL Compact Edition, e grazie a lui ho potuto meglio preparare la mia sessione su WP7 e Database Locale.

Quando poi mi sono trovato ad implementare il programma l’Impiccato, che ha un database leggermente superiore alla media degli esempi fin qui circolati (circa 290.000 records), ho voluto indagare su quali fossero i comandi SQL generati da LinqTo SQL.

Parte di questa storia l’ho scritta sul mio post SQL Compact - SKIP, TAKE and SQL emitted code .

Visto che un analogo articolo di Erik ha suscitato un certo interesse, riporto qui il metodo che ho usato per visualizzare nella finestra Output di Debug il comando SQL emesso da LinqToSQL e che Erik ha deciso di introdurre nella sua prossima versione del suo fantastico add-in (SQL Server Compact Toolbox) cosa che ovviamente mi rende davvero felice.

Iniziamo col dire che il DataContext ha una proprietà Log di tipo StreamWriter. Per mostrare l'SQL nella console basta impostare la proprietà Log del DataContext così:

myDataContext.Log = Console.Out

Ovviamente sviluppando su Windows Phone non abbiamo a disposizione la Console.

Per ovviare a tale inconveniente e utilizzare la finestra output del debugger, ho creato la seguente classe:

using System.IO;
using System.Diagnostics;
using System.Text;

class DebugTextWriter : TextWriter
{
    public override void Write(char[] buffer, int index, int count)
    {
        Debug.WriteLine(new String(buffer, index, count));
    }

    public override void Write(string value)
    {
        Debug.WriteLine(value);
    }

    public override Encoding Encoding
    {
        get { return Encoding.UTF8; }
    }
}

Poiché la classe eredita da TextWriter, che è a sua volta uno StreamWriter, possiamo scrivere:

myDataContext.Log = new DebugTextWriter();

ed ottenere nella finestra Output di Debug il comando SQL emesso da LinqToSQL. Provare per credere :-)

That’s all folks!

posted @ domenica 4 dicembre 2011 02:36

Print
Comments have been closed on this topic.
«luglio»
domlunmarmergiovensab
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910