Lo strano caso di un DataSet Tipizzato 3° parte (2/2)

-----> continuo

Ultima cosa, ma non per importanza, c’è da porre attenzione alla creazione delle query per un TableAdapter che restituiscono uno schema diverso dalla query principale (Fill/GetData), è possibile superare tale disagio accedendo alla file NomeDataSet.vb, per fare ciò basta fare doppio click con il mouse sul TableAdapter per cui dobbiamo definire la nuova query.

Una volta fatto accesso a tale file, possiamo notare che è stata creata in automatico la partial class relativa al nostro TableAdapter.

La Partial class è una novità introdotta da Microsoft nella versione del framework 2.0, tale tecnica da la possibilità di suddividere la definizione di una classe, di una struttura o di un'interfaccia tra due o più file di origine. Ogni file di origine contiene una sezione della definizione della classe. Tutte le parti vengono combinate al momento della compilazione dell'applicazione.

Questo è decisamente fondamentale nei seguenti casi: (*)

              · Quando si lavora su progetti di grandi dimensioni, la distribuzione di una classe in file distinti ne consente l'utilizzo simultaneo da parte di più programmatori.

              · Quando si utilizza un'origine generata automaticamente, è possibile aggiungere codice alla classe senza dover ricreare il file di origine.

In Visual Studio questo approccio viene utilizzato per la creazione di Windows Form, codice wrapper di servizi Web e così via.

È possibile creare codice che utilizza queste classi senza dover modificare il file creato in Visual Studio.

(*) fonte http://msdn.microsoft.com/it-it/library/wa80x488%28VS.80%29.aspx

Una volta che s’è auto-generata la partial class del nostro TableAdapter è possibile definirgli all’interno metodi che poi potranno essere utilizzati alla stessa maniera degli altri creati tramite la procedura guidata.

Per poter creare, a questo punto, una query che restituisca uno schema diverso da quello definito dalla query principale e che non sia una query scalare bisogna affidarsi agli OleDbComman, OleDbConnection e DataReader. Quindi abbiamo bisogno di utilizzare l’altra parte di ADO.NET, la parte server managed o “CONNESSA”.

Supponiamo di avere come nostro DataTable questo rappresentato di seguito:

clip_image002[7]

E supponiamo di voler recuperare solo la lista delle città appartenenti ai miei Customers, sarebbe un gioco da ragazzi se si potesse fare la query con la creazione guidata, ma ciò non è possibile quindi all’interno della partial class creeremo il metodo recuperaCitta().

‘ VB

public partial Class Customers
{
    private Function recuperaCitta () as DataTable
        Dim strSQL as String 
        Dim objConnection as New OledbConnection(strConnection)
        strSql = “SELECT City From Customers”
       Dim objCommand as New OledbCommand(strSQL, objConnection)
       Dim objDataReader as OledbDataReader
        Dim dataTable as New DataTable
        dataTable.Columns.Add(“City”)

Try

           If objConnection.State <> ConnectionState.Open Then
            objConnection.Open()
           End If

     objDataReader = objCommand.ExecuteReader()

          dataTable.Load(objDataReader)

          return dataTable

    Catch ex As Exception

                    Throw ex

       Finally

                   If objConnection.State < > ConnectionState.Close Then
               objConnection.Close()
                   End If

         objDataReader.Close()

   End Try

    End Sub
End Class
 

// C#

public partial class Customers
{
    private DataTable recuperaCitta ()
    {
        string strSQL;             
        OledbConnection objConnection = New OledbConnection(strConnection);
        strSql = “SELECT City From Customers”;
    OledbCommand objCommand = New OledbCommand(strSQL, objConnection);
    OledbDataReader objDataReader = OledbDataReader;
        DataTable dataTable = New DataTable;
    dataTable.Columns.Add(“City”);

try

{

        if (objConnection.State != ConnectionState.Open)

{
   objConnection.Open();
}

objDataReader = objCommand.ExecuteReader();

dataTable.Load(objDataReader);

return dataTable;

}

catch Exception ex

{

throw ex;

}

finally

{

    if (objConnection.State != ConnectionState.Close)

   {
    objConnection.Close();
   }         

objDataReader.Close();

}

    }
}

Spero che questo post vi abbia chiarito anche in minima parte cosa è un TableAdapter e in che modo si può utilizzare.

Sono a vostra disposizione per chiarimenti, e siete pregati di postare qualsiasi anomalia o qualsiasi altra cosa non vada o da aggiungere a ciò che ho scritto.

Published 22 ott 2009 15:02 da Giorgio
Inserito sotto:
Powered by Community Server (Commercial Edition), by Telligent Systems