mercredi 27 juin 2012

ADO.NET - Mode déconnecté

La classe Data reste globalement inchangée et n'ajoute qu'une méthode GetAdapter. L'objet retourné par cette méthode répertorie les différentes commandes qui vont permettre de supprimer, créer, mettre à jour les données, commandes générés à partir de la requête de sélection :

        public DbDataAdapter GetAdapter(string commandText,params object[] values)
        {
            var builder = factory.CreateCommandBuilder();
            builder.DataAdapter = factory.CreateDataAdapter();
            builder.DataAdapter.SelectCommand = GetCommand(commandText, values);
            builder.DataAdapter.DeleteCommand = builder.GetDeleteCommand();
            builder.DataAdapter.InsertCommand = builder.GetInsertCommand();
            builder.DataAdapter.UpdateCommand = builder.GetUpdateCommand();
            builder.DataAdapter.SelectCommand.Connection.Close();
            return builder.DataAdapter;
        }
Cet objet peut alors être utilisé dans le programme principal pour lire les données dans un objet DataTable ou DataSet (qui représentent un cache en lecture/écriture d'une table ou d'un ensemble de tables). Les données stockées par cet objet peuvent alors être modifiées à volonté avant d'appeler la méthode Update qui va examiner l'état des différentes lignes (modifiée, supprimée, insérée) pour envoyer les modifications correspondantes vers la base de données :
using System;
using System.Data;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var Data= new App.Data();
            var adapter=Data.GetAdapter("SELECT [Category ID],[Category Name] FROM Categories ORDER BY [Category Name]");
            var table = new DataTable();
            adapter.Fill(table);
            // Déconnecté
            foreach(DataRow row in table.Rows)
            {
                var value = (string)row["Category Name"];
                value=value.EndsWith("z")?value.Substring(0,value.Length-1):value+"z";
                row["Category Name"] = value;
                Console.WriteLine(value);
            }
            // Exécuter toutes les mises à jour
            adapter.Update(table);
            Console.ReadKey();
        }
    }
}>
Dans le mode déconnecté comme connecté, on note l'utilisation d'objets spécifiques au transfert de données entre la base et l'application, qu'il s'agisse d'un "Reader", "DataTable" ou "DataSet". Même si les "DataSet typés" permettent d'exposer ces données d'une façon plus fortement typée, cela reste une solution hybride.

L'évolution ultime de ADO.NET, Entity Framework, a pour but de résoudre cette friction en exposant les données de la base sous forme d'objets .NET tout à fait ordinaires et c'est ce que nous allons voir maintenant.

Aucun commentaire:

Enregistrer un commentaire