Le premier site francophone dédié au développement Pocket PC

Le développement d'applications avec les Smart Device Extension (SDE)
Auteur
Laurent Nyffels
Date 21 octobre 2002
 
   


Partie 2

Sources de l'article

Introduction

Cet article est la premier d'une série qui vous propose d'appréhender le développement d'applications en C# avec les SDE. Celui-ci a pour but, d'expliquer comment travailler avec une base SQL Server CE 2.0, à partir d'une application développée en C# sous VS.NET avec les " Smart Device Extension ", (SDE).

Introduction sur les Smart Device Extensions

Le plug-in SDE pour Visual Studio .NET fournit un template pour le développement d'applications embarquées sur la plate-forme Windows CE. L'utilisation de cette extension à VS.NET permet le développement, la compilation et le déploiement d'applications fonctionnant sur la base du .NET Compact Framework.

L'intérêt majeur de cette extension est que vous pouvez utiliser les compétences que vous avez déjà acquises sur VS.NET et le développement d'applications Windows (WinForms) pour développer des applications pour Pocket PC. En effet, le développeur dispose d'un IDE de qualité, d'un débuggeur puissant et surtout du langage objet C# pour développer ses applications Pocket PC.

Créer un nouveau projet

Vous créez un nouveau projet pour Pocket PC de la même façon que vous créez tout projet Visual Studio, c'est à dire en ouvrant la boîte de dialogue " New Project " et en choisissant le template de projet " Smart Device Application " créé lors de l'installation du SDE.

La différence avec un projet sur PC est que vous ne pouvez pas choisir le type de projet (Windows Application, Class Library ) avant d'avoir sélectionné votre plate-forme (Windows CE ou Pocket PC).

Lors du déploiement de votre projet sur le Pocket PC, Visual Studio installe le .NET Compact Framework, s'il n'est pas déjà installé. Les fichers (dll) sont copiés dans le répertoire \Windows de votre Pocket PC.

Installer SQL Server CE

Dans le menu " Projet ", sélectionner " Add Reference ", puis dans la liste déroulante, l'assemblée " System.Data.SqlServerCE ".

En ajoutant une référence sur SQL Server CE et en utilisant l'espace de nom System.Data.SqlServerCe dans votre projet, lors du déploiement du projet sur le Pocket PC, Visual Studio installera SQL Server CE (s'il n'est pas déjà installé).

Lors de l'installation de SQL Server CE 2.0 l'utilitaire " Query Analyser ", qui permet de gérer les bases SQL Server CE au format .sdf est également installé.
Cet outil est très utile car il permet démarrer ou d'arrêter des bases, de visualiser les propriétés et le contenu des tables, mais aussi de créer et d'exécuter des requêtes SQL.

ADO.NET et SQL Server CE sur le .NET Compact Framework

Le .NET Compact Framework supporte une partie d'ADO.NET et inclus le SQL Server CE data provider. La stratégie de Microsoft est de pousser les entreprises à utiliser SQL Serveur et Visual Studio. Pour cela Microsoft livre en standard et gratuitement SQL Server CE et les SDE. On peut regretter que la librairie de classes du .NET Compact Framework n'offre pas la possibilité de se connecter aux bases Pocket Access …tout au moins dans la version Bêta des SDE.

Le .NET Compact Framework fournit les classes permettant la réplication de données entre une base SQL Serveur CE sur Pocket PC et une base SQL Serveur 2000 sur PC.
Les mécanismes RDA (Remote Data Access) et REPLICATION sont disponibles. Ces techniques seront abordées dans les prochains articles.

Intéressons nous de plus prêt à ADO.NET, et aux moyens d'accéder à une base SQL Server CE.

Le framework d'accès à une base SQL Server CE se décompose en plusieurs couches.
Au plus niveau on trouve le driver OLE DB pour SQL Server CE. Son rôle est de fournir un moyen d'accès direct à la base de données. Ce driver est un composant non managé (c'est à dire, qui ne nécessite pas la CLR (Common Language Runtime) pour fonctionner.
Au niveau supérieur on trouve le provider SQL Server et l'API ADO.NET fournissant à votre application .NET, les classes d'accès aux bases de données SQL Server CE. Ces composants sont dit " managés ", car il fonctionne via la CLR.

L'apport majeur d'ADO.NET par rapport à ADO est de permettre d'accéder aux données en base de deux façons différentes : En mode connecté ou en mode déconnecté.

Avec le mode connecté, l'application utilise une connexion physique permanente avec la base de données SQL Server CE.

Avec le mode déconnecté, l'application utilise temporairement une connexion physique avec la base SQL Server CE, lorsqu'elle doit extraire ou insérer des données. Mais lorsqu'elle les utilise, elle le fait à partir d'une copie locale de celles-ci en mémoire (via un DataSet).

Illustration

La solution que vous trouverez en téléchargement est purement didactique et vous pouvez l'enrichir à votre grès. Son objectif est de vous faire comprendre comment :

Créer une base de données SQL Server CE et une table.
Créer un écran permettant la saisie et l'insertion des données dans la table en mode connecté.
Créer un écran de visualisation des données en base via une ListView en mode déconnecté (En effet, le très pratique objet DataGrid n'existe pas encore dans la version Bêta du .NET Compact Framework).

Création d'une base de données SQL Server CE

Extrait des instructions essentielles :

// Déclaration de l'espace de nom
using System.Data.SqlServerCe;

……
// Création du fichier base de données vide au format " sdf "
Engine eng = null;
eng = new Engine("Data Source=\\My Documents\\maBase.sdf");
eng.CreateDatabase();

Création d'une Table

Extrait des instructions essentielles

using System.Data.SqlServerCe;

……
SqlCeDataReader reader = null;
SqlCeConnection myConn = null;
SqlCeCommand myComm = null;

// Définition de la table à créer

String strSQL = "CREATE TABLE " + name + " (code int IDENTITY (1,1) PRIMARY KEY, nom nvarchar (30) NOT NULL, prenom nvarchar (30) NULL, age int NULL)";

// Création de la connexion en passant la chaîne en paramètre
myConn = new SqlCeConnection("Data Source=\\My Documents\\maBase.sdf");

// Création d'un objet SqlCeCommand comprenant la connexion et la commande SQL à passer
myComm = new SqlCeCommand(strSQL, myConn);

// Ouverture de la connexion à la base
myConn.Open();

// Envoi de la commande SQL à la connexion et construction d'un objet SqlCeDataReader
reader = myComm.ExecuteReader();

………
// Fermeture de la connexion et de l'objet SqlCeDataReader
if (reader != null)
reader.Close();

if (myConn.State == ConnectionState.Open)
myConn.Close();

Insérer des données dans la table en mode connecté

Extrait des instructions essentielles

using System.Data.SqlServerCe;

……

String strSQL = "INSERT INTO " + table + " (nom, prenom, age) VALUES ('"+dataNom+"', '"+dataPrenom+ "', '"+System.Convert.ToInt16(dataAge)+ "')";

myConn = new SqlCeConnection("Data Source=\\My Documents\\maBase.sdf");
myComm = new SqlCeCommand(strSQL, myConn);

myConn.Open();

// Execute la requête SQL et renvoi le nombre de " rows " affectés par la
// requête. Dans notre cas nbRows = 1.
nbRows = myComm.ExecuteNonQuery();

………

if (myConn.State == ConnectionState.Open)
myConn.Close();

Lire les données en mode déconnecté et affichage des données dans une Listview

Extrait des instructions essentielles

using System.Data.SqlServerCe;
// Espace de nom nécessaire à l'utilisation d'un DataSet
using System.Data;
using System.Data.Common;

……

SqlCeDataAdapter myAdapter = null;
SqlCeConnection myConn = null;
DataSet myDs = null;
ListViewItem objList = null;

// Récupération de l'ensemble des données de la table contact
String strSQL = "select * from contact ";

myConn = new SqlCeConnection("Data Source=\\My Documents\\maBase.sdf");

// Instanciation d'un objet SqlCeDataAdapter qui va récupérer les données issus de
// la requête de sélection
myAdapter = new SqlCeDataAdapter(strSQL, myConn);

// Instanciation et " remplissage " d'un DataSet, qui est une sorte de
// copie en mémoire de la table contact et de ses données, à partir de
// l'objet SqlCeDataAdapter
myDs = new DataSet();
myAdapter.FillSchema(myDs,SchemaType.Source, "contact");
myAdapter.Fill(myDs, "contact");

// Récupération des données dans une table du DataSet
DataTable tblContact;
tblContact = myDs.Tables["contact"];


// Extraction des lignes (Rows) de la table du Dataset et Affichage
// affichage de ses données dans la ListView
foreach (DataRow dr in tblContact.Rows)
{
objList = new ListViewItem(new
String[]{dr["prenom"].ToString(),dr["nom"].ToString(),
dr["age"].ToString()});
myListView.Items.Add(objList);
objList = null;
}

………
if (myConn.State == ConnectionState.Open)
myConn.Close();

La suite au prochain numéro....

Laurent Nyffels

 

 
   

Copyright 2001-2004 - Tous droits réservés
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.