Posts
103
Comments
238
Trackbacks
4
settembre 2005 Blog Posts
Ottenere DataTable da IDataReader

Qualche giorno fa ho inserito un post sul forum perchè avevo bisogno di ottenere un DataSet, oppure un DataTable o un DataView, da un IDataReader.
Non avendo ottenuto risposta ho cercato un pò ed ho trovato diverse soluzioni, di cui una abbastanza elegante.

Il namespace System.Data.Common contiene una classe di nome DBDataAdapter, dalla quale ereditano tutti gli altri DataAdapter, che contiene un overload del metodo Fill (protected) che accetta come parametri un DataTable e un IDataReader, proprio ciò di cui avevo bisogno.
Quello che ho fatto è stato quindi creare un classe che derivasse da DBDataAdapter e che esponesse tale funzionalità con un metodo pubblico:

public class DataReaderAdapter : DbDataAdapter 

    
public int FillFromReader(DataTable dataTable, IDataReader dataReader)
    { 
        
return this.Fill(dataTable, dataReader); 
    }
}

C'è la necessità tuttavia di implementare quattro metodi astratti di DBDataAdapter, quindi al codice della classe va aggiunto il seguente, ed il corpo dei quattro metodi può essere lasciato vuoto o riempito con il throw di un'eccezione come ha fatto per me ReSharper:

protected override RowUpdatedEventArgs CreateRowUpdatedEvent(DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping)
{
    
throw new NotImplementedException();
}

protected override RowUpdatingEventArgs CreateRowUpdatingEvent(DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping)
{
    
throw new NotImplementedException();
}

protected override void OnRowUpdated(RowUpdatedEventArgs value)
{
    
throw new NotImplementedException();
}

protected override void OnRowUpdating(RowUpdatingEventArgs value)
{
    
throw new NotImplementedException();
}
        

Il codice completo della classe risulta quindi:

public class DataReaderAdapter : DbDataAdapter 

    
public int FillFromReader(DataTable dataTable, IDataReader dataReader)
    { 
        
return this.Fill(dataTable, dataReader); 
    }

    
protected override RowUpdatedEventArgs CreateRowUpdatedEvent(DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping)
    {
        
throw new NotImplementedException();
    }

    
protected override RowUpdatingEventArgs CreateRowUpdatingEvent(DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping)
    {
        
throw new NotImplementedException();
    }

    
protected override void OnRowUpdated(RowUpdatedEventArgs value)
    {
        
throw new NotImplementedException();
    }

    
protected override void OnRowUpdating(RowUpdatingEventArgs value)
    {
        
throw new NotImplementedException();
    }

Ora l'utilizzo della classe è molto semplice, per fare un esempio:

[...]

SqlDataReader dr = cmd.ExecuteReader(); 
DataTable dt = 
new DataTable(); 
DataReaderAdapter da = 
new DataReaderAdapter(); 
da.FillFromReader(dt, dr);

[...]

Il link al post originale è questo: http://weblogs.asp.net/rosherove/archive/2004/01/22/61541.aspx, anche se la soluzione che ho adottato non è nel post ma in uno dei commenti.

Spero possa essere stato utile.

powered by IMHO 1.2

posted @ venerdì 30 settembre 2005 15:03 | Feedback (2)
[OT] P2P: WinMX chiuso, oppure no?

Qualche giorno fa l'annuncio che il mitico WinMX è stato - pare definitivamente - chiuso. E invece, a qualche giorno di distanza, sembra già che abbiano trovato un modo per continuare a farlo funzionare.
I dettagli in questo articolo: http://punto-informatico.it/p.asp?i=55153

Tuttavia, l'annuncio della sua chiusura ha fatto incrementare i download di una nuova applicazione open source chiamata Ares Galaxy, che non avevo mai visto ma che così ad occhio mi sembra decisamente carina. Non ho ancora avuto modo di addentrarmi nei dettagli e non so che protocolli utilizzi, ma beh... scarica!

UPDATE: poichè i miei referrers convergono quasi tutti a questo post ho pensato di aggiornarlo. Come ormai quasi tutti sanno WinMX funziona ancora, basta applicare una patch. Per info: http://www.winmxitalia.it/

powered by IMHO 1.2

posted @ martedì 27 settembre 2005 12:36 | Feedback (0)
Scott Hanselman's 2005 Ultimate Developer and Power Users Tool List

Scott Hanselman tiene aggiornata una lista di tools davvero interessanti, in particolare per sviluppatori.

Paint.NET è consigliatissimo!

Scott Hanselman's 2005 Ultimate Developer and Power Users Tool List

powered by IMHO 1.2

posted @ domenica 25 settembre 2005 02:27 | Feedback (0)
Early and late Databinding

Personalmente non ne sapevo molto, perciò lo trovo un argomento interessante; l'articolo parla di performance dei metodi di Databinding, in particolare le differenze tra l'utilizzo di DataBinder.Eval e il databinding con cast a tipi specifici.

http://www.mostlylucid.co.uk/archive/2003/12/09/664.aspx

powered by IMHO 1.2

posted @ mercoledì 21 settembre 2005 23:24 | Feedback (0)
Perchè Ugidotnet non si ricorda di me?

Ho una curiosità, forse banale, riguardo al fatto che la homepage di Ugidotnet non si ricorda il mio login e la mia password. In realtà il suo cookie funziona benissimo, ma quello a cui mi riferisco è la funzionalità del browser di ricordare ciò che è stato inserito in passato. Come mai quando inserisco le prime lettere del mio login non scende il menu e di conseguenza non si attiva l'autocomplete della password? Nel codice della pagina l'autocomplete non è messo ad off, quindi dovrebbe funzionare....Forse mi sfugge qualcosa!

posted @ lunedì 19 settembre 2005 03:57 | Feedback (11)
Il mio primo Webcast su ASP.NET, curiosità su QueryString

Stasera ho scaricato e guardato il mio primo Webcast di Microsoft: Intro to ASP.NET (Part 1 of 4) - ASP.NET Fundamentals (in C#) - Level 100. Il livello è bassino, è vero, ma devo dire che non l'ho trovato interessante come mi aspettavo. Si corre un pò troppo su certe cose e credo che uno che non ha mai visto niente di ASP.NET non ci avrebbe capito un tubo.

Ad ogni modo mi è stato utile perchè mi ha fatto venire un dubbio su come si fa a recuperare un intero da querystring.

Se voglio recuperare un intero:

protected int IdIscritto,

che sia ad esempio la chiave di un record di una tabella, mi vengono in mente 2 modi:

  1. IdIscritto = Convert.ToInt32(Request.QueryString["IdIscritto"]);

  2. IdIscritto = int.Parse(Request.QueryString["IdIscritto"]);

Nel Webcast viene utilizzato il secondo metodo, mentre io di solito ho sempre usato il primo. Che differenza c'è tra i due in questo caso?
Altra curiosità, anche se in questo caso non è attuabile perchè la querystring è, appunto, una stringa. Se l'oggetto da convertire in intero è, appunto, un oggetto, che differenza c'è tra il metodo 1. e il cast esplicito con (int)?

posted @ lunedì 19 settembre 2005 03:45 | Feedback (3)
Creating an Installation Page That Automatically Detects the .NET Framework Version
Questo articolo nella MSDN library mostra come creare una pagina di installazione di una applicazione web che utilizza il campo userAgent per verificare la versione del .NET Framework installata sul computer.
posted @ domenica 18 settembre 2005 14:36 | Feedback (0)
Recommending @@Identity? I Woudn't

Bill Vaughn sull'utilizzo di SCOPE_IDENTITY() e @@Identity per far ritornare il valore dell'ultimo record inserito in una tabella.

Il codice generato dalle ultime versioni di VS2005 (dopo Beta2) per i DataSet tipizzati utilizza SCOPE_IDENTITY() invece che @@Identity.

posted @ domenica 18 settembre 2005 14:29 | Feedback (0)
Blog attivo

Ho attivato finalmente il blog, dopo aver cercato di installarlo sul mio spazio web di Aruba, dove tralaltro non sono riuscito a farlo funzionare a causa del problema col www che Aruba non riesce a risolvere nell'indirizzo...

A parte questo, saluto tutti! Sono abbastanza nuovo qui, ma sono molto appassionato di programmazione ed in particolare di .NET; mi piace scrivere applicazioni sia web ke windows ed adoro ASP.NET.

Ciao a tutti ed a presto.

posted @ venerdì 16 settembre 2005 15:09 | Feedback (5)
News

Scopri CS2, il mio progetto universitario per l'indicizzazione e la ricerca di codice sorgente personale costruito su Lucene.Net.

Windows Developer Power Tools

Potete trovare il mio progetto BusyBoxDotNet nel libro Windows Developer Power Tools, pubblicato da O'Reilly, per il quale ho scritto l'intero capito dedicato.

Sono stato nominato dVP 2008, un riconoscimento per l'apporto fornito alla comunità del progetto db4o.