Programmer en C# avec ADO.NET
[15 mn de lecture - paru le 11/3/2003 - Public : Débutant]
|
   
|
Auteur
2. L'architecture ADO.NET
ADO.NET a été conçu principalement pour être utilisé en mode déconnecté et
distribuable à travers le réseau grâce à la technologie XML, ADO serait la
meilleur approche si notre application nécessitait une connexion continue vers une
source de données. L'objet DataReader d'ADO.NET est ce qui se rapproche le plus de l'objet
RecordSet d'ADO, car il dépend d'une connexion continue pour lire les
données d'une source de données.
2.1. Connecté (DataReader)
Il arrive que dans une application on n'ait besoin que de lire des données. Surtout si
l'on traite de grandes quantités de données alors il est plus judicieux
d'utiliser l'objet DataReader, car le traitement d'un tel flot d'informations
avec un DataSet nécessiterait trop de ressource mémoire. Le point fort du
DataReader est qu'il prend très peu de place en mémoire car il ne fait que lire
les données. Il ne lit qu'un enregistrement à la fois. Son inconvénient c'est
qu'il utilise un mode connecté c'est a dire qu'aucune autre action ne peut être
effectué sur la connexion tant qu'elle n'a pas été fermé, il ne faut donc pas oublier de fermer la connexion
aussitôt la lecture des données fini.
string strCon = "Data Source = localhost; Integrated Security=SSPI;";
strCon += "Initial Catalog = Mydb";
string strQuery = "select * from user" ;
SqlConnection oCon = new SqlConnection(strCon);
try
{
SqlCommand oCommand = new SqlCommand(strQuery,strCon);
oCon.Open();
SqlDataReader oReader = oCommand.ExecuteReader();
while (oReader.NextResult())
{
//Affiche les données des colonnes Nom , Prénom de la table user
Console.WriteLine("\t{0}\t{1}\n",oReader.GetString(1),oReader.GetString(2));
}
oReader.Close();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
oCon.Close();
} | 2.2 Déconnecté (DataAdapter/DataSet)Avec l'évolution des réseaux, il fallait une méthode
adapté qui puisse gérer toujours plus de connexion sans affecter les
performances de la base de données. C'est là que la gestion des connexions entre en jeu,
pour une gestion optimum les
applications devraient se connecter à la base lire les données nécessaires se
déconnecter, traiter les données puis se reconnecter à la base pour enregistrer
les modifications tous ça dans des temps les plus court qu'ils soient. ADO ne permettait pas une telle flexibilité, c'est donc
ADO.NET qui va pallier ce manque. On a vu précédemment comment avec l'objet
DataReader on ne pouvait traiter qu'une ligne à la fois, mais dans la pratique
il arrive souvent qu'on ai à traiter plusieurs lignes à la fois (pour faire des
tries par exemple) la tache devient plus complexe et l'utilisation de l'objet
DataReader devient moins pertinente. C'est pour cela que ADO.NET introduit de
nouveaux objets qui fonctionnent principalement en mode deconnecté. L'objet DataAdapter
Il est partie intégrante des managed providers d'ADO.NET. Il est la liaison
entre une source de données et un DataSet. En bref il permet de faire passer les
données d'une source de données vers un DataSet puis du DataSet vers la source
de données. Pour filtrer les données que le DataAdapter doit récupérer ou
modifier on utilise une requête SQL ou bien une procédure stockée. ADO.NET
dispose de 2 types de DataAdapter :
- OleDbDataAdapter : il peut être employé avec n'importe qu'elle source de
données.
- SqlDataAdapter : il est optimisé pour SQLServer, car il n'a pas à passer
par la couche OLEBD.
L'objet DataSet Le DataSet est la pièce maîtresse de l'architecture déconnecté d'ADO.NET.
L'objet DataSet joue le rôle de mémoire tampon, cette mémoire va contenir les
données qui lui ont été fournis par l'objet DataAdapter. L'objet DataSet est
conçu sur le modèle relationnel des bases de données, c'est à dire qu'il est
constitué de tables, colonnes, lignes ainsi que de contraintes et relations.
L'autre point fort du DataSet est qu'il utilise un schéma XML pour représenter
ses données. Un DataSet peut être peuplé de 3 façons différentes :
- avec la méthode Fill d'un DataAdapter
- à partir d'un fichier XML en utilisant la méthode ReadXml
- manuellement
Une fois peuplé un DataSet est déconnecté de la source.
string strCon = "Data Source = localhost; Integrated Security=SSPI;";
strCon += "Initial Catalog = Mydb";
string strQuery = "select * from user" ;
SqlConnection oCon = new SqlConnection(strCon);
try
{
SqlCommand oCommand = new SqlCommand(strQuery,strCon);
//SqlDataAdapter gère lui même la connexion
SqlDataAdapter oSqlDataAdapter = new SqlDataAdapter(oCommand);
DataSet ds = new DataSet();
oSqlDataAdapter.Fill(ds,"user");
for(int i=0;i<ds.Tables["user"].Rows.Count;i++)
{
Console.WriteLine("\t{0}\t{1}\n",ds.Tables["user"].Rows[i]["nom"].ToString(),
ds.Tables["user"].Rows[i]["prenom"].ToString());
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
oCon.Close();
} |
|