Cet aide mémoire se focalisera plutôt sur l'utilisation générale des DataSets.
On y découvrira:
- L'utilisation du SqlCommand, SqlDataAdapter et DataSet afin de lire les données (via DataTable et DataRow).
- Les méthodes de lectures via:
- DataTable.Rows : collection of DataRow
- DataTable.Select : Permettant le filtrage et le tri d'un sous ensemble des enregistrements. Aussi une collection de DataRow.
- DataTable.DefaultView : DataView permettant également le filtrage et le tri d'un sous ensemble. DataView contenant une collection de DataRowView.
- Mise à jour des données d'une DataTable dans un Dataset (et sauvegarde en DB).
eTutorial.org |
- Ce Tutorial Ado.Net vraiment très complet (passant en revue les classes de contraintes, les classes Ado.Net et un API Quick reférence, etc) paru sur eTutorials.org
- L'article "DataTable - Adding, Modifying, Deleting, Filtering, Sorting rows & Reading/Writing from/to Xml", article concis montrant comment créer dynamiquement une DataTable avec ses colonnes, manipuler les données, créer les XmlSchema et sauver le tout dans un fichier XML.
Les DataViews offrent de nombreuses possibilités avancées qui va bien au-delà de ce qui est présenté dans l'exemple de cet article.
L'article "ADO.NET - Aide mémoire - 3/4 : DataViews" reprend une description et quelques références Microsoft.
Exemple
Voici l'exemple dont seulement les parties les plus pertinentes sont reprises dans l'article (voir fichier source pour la totalité du code).
Cet exemple utilise Snippet Compiler comme d'habitude.
Fichier Source: AdoNet_DataSet.cs
using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient; public class MyClass { public static void RunSnippet() { DropTestDatabase(); // Drop the test database if any exists CreateTestDatabase(); DisplaySortedDataset(); UpdateDataSet(); } public static void DisplaySortedDataset () { WL( "=== DATASET read/filter/sort operation =================" ); SqlConnection sqlConn = GetTestConnection(); sqlConn.Open(); SqlCommand sqlCmd = new SqlCommand( "select * from usr", sqlConn ); SqlDataAdapter sqlAd = new SqlDataAdapter( sqlCmd ); DataSet ds = new DataSet(); sqlAd.Fill( ds, "dataTableName_User" ); // give an explicit name for the sample // Display all DataTable.TableName in the DataSet foreach( DataTable tbl in ds.Tables ) WL( String.Format( " DataSet.Tables[i].TableName="+ tbl.TableName )); // === DataTable Rows ===================== // Display the Data WL( "Display data (Via Rows)" ); foreach( DataRow dr in ds.Tables["dataTableName_User"].Rows ) WL( String.Format( " User {0} (id:{1})", dr["usrname"].ToString(), dr["uid"].ToString() )); // === DataTable Select =================== // Sort it + redisplay it WL( "Display sorted data (via Select)" ); DataRow[] sorted = ds.Tables["dataTablename_User"].Select("usrname like '%'", "uid desc"); foreach( DataRow dr in sorted ) WL( String.Format( " User {0} (id:{1})", dr["usrname"].ToString(), dr["uid"].ToString() )); // SubSelect + sort WL( "Display filtered data (via Select)" ); DataRow[] filtered = ds.Tables["dataTablename_User"].Select("usrname like '%a%'", "usrname asc"); foreach( DataRow dr in filtered ) WL( String.Format( " User {0} (id:{1})", dr["usrname"].ToString(), dr["uid"].ToString() )); // === DataView =========================== // Sorted and filtered with DataView // DataView may be very useful to work with visual componant // More information on DataViews on Microsoft site @ // http://msdn.microsoft.com/en-us/library/fdcwwhez.aspx // WL( "Display filtered data (via DataView)" ); DataView dv = ds.Tables["dataTableName_User"].DefaultView; dv.RowFilter = "usrname like '%a%'"; dv.Sort = "uid desc"; // In a DataView, the Rows are available via DataRowView foreach( DataRowView drv in dv ) WL( String.Format( " User {0} (id:{1})", drv["usrname"].ToString(), drv["uid"].ToString() )); sqlConn.Close(); } public static void UpdateDataSet () { WL( "=== UPDATE operation ============================" ); SqlConnection sqlConn = GetTestConnection(); sqlConn.Open(); // Read the data SqlDataAdapter ad = new SqlDataAdapter( "Select * from USR order by usrName desc", sqlConn ); // Create a CommandBuilder, this will automatically generate the appropriate commands // and set the various properties of the SqlAdapter. SqlCommandBuilder cmdBuilder = new SqlCommandBuilder( ad ); // Create and fill dataset DataSet ds = new DataSet(); ad.Fill( ds, "USR" ); // Display the Data WL( "Display data BEFORE change" ); foreach( DataRow dr in ds.Tables["USR"].Rows ) WL( String.Format( " User {0} (id:{1})", dr["usrname"].ToString(), dr["uid"].ToString() )); // Update Data DataRow[] filtered = ds.Tables["USR"].Select( "usrname like 'anatole'", "uid" ); if( filtered.Length > 0 ) { filtered[0]["usrname"] = "John Doe"; } // Add a new row // Removal is done with DataTable.Rows.RemoveAt(RowIndex) or DataTable.Rows.Remove( DataRowObject ) DataRow added = ds.Tables["USR"].Rows.Add(); added["usrname"] = "Florentin Célestin"; added["uid"] = 120; // Save the DataSet ad.Update(ds, "USR"); // ReRead the DataSet and Display result ds.Clear(); ad.Fill( ds, "USR" ); // Display the Data WL( "Display data AFTER change" ); foreach( DataRow dr in ds.Tables["USR"].Rows ) WL( String.Format( " User {0} (id:{1})", dr["usrname"].ToString(), dr["uid"].ToString() )); sqlConn.Close(); } #region Sample Database helper // Connect and create the Test Database
// See the source file for the Full code. #endregion #region Helper methods // ... #endregion }
Aucun commentaire:
Enregistrer un commentaire