-----> 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] clip_image002[7]](http://dotnetcampania.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/giosworld.metablogapi/0882.clip_5F00_image0027_5F00_thumb_5F00_5221A619.jpg)
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 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.