Академический Документы
Профессиональный Документы
Культура Документы
Net
ActiveX Data Object .Net (ADO.Net)
ADO.Net
API d’accès (local ou distant)
à une source de données : SGBD, tableur, fichier, messagerie, …
ADO.Net ADO.Net
ActiveX Data Object .Net (ADO.Net) Historique
ODBC Accès SGBD
• API d'interaction avec un SGBD
• nombreuses utilisations évolutions
- sauvegarde de données de manière sûre VB RDO DAO C++
- exploration du contenu d'un SGBD
unification
- client/serveur 3 tiers
OLE-DB ts langages – API COM
ADO
ADO.Net
framework .Net
client serveur d'applications SGBD ADO.Net
Implémentation de l’API pour un type de sources de données Identifie la source de données à laquelle on se connecte
Principaux providers • chaîne de caractères
• liste de couples propriété=valeur
• SQL Server (>= 7.0) System.Data.SqlClient.SqlConnection
• format dépend du provider
• OLE-DB (SQL Server < 7.0, …) System.Data.OleDb.OleDbConnection
• ODBC (Excel, Access, …) System.Data.Odbc.OdbcConnection
Exemple
• MySQL http://sourceforge.net/projects/mysqlnet/
•… • ODBC
Fournisseur "Driver={SQL Server};Server=localhost;Database=mydb;Uid=login;Pwd=passwd"
Chaque provider = une classe • OLE-DB
OLE-DB “Provider=sqloledb;Data Source=…;Database=…;User Id=…;Password=…”
•…
ODBC
voir http://geekswithblogs.net/brcraju/archive/2004/02/03/1689.aspx
ADO.Net ADO.Net
Utilisation de ADO.Net Utilisation de ADO.Net (suite)
1. Ouverture d'une connexion avec la base comptes reader.Read() retourne vrai tant qu'il reste des enregistrements dans le résultat
OdbcConnection cx = et positionne le curseur sur l'enregistrement suivant
new OdbcConnection("Driver={SQL Server};Server=localhost;Database=pubs;");
cx.Open(); reader.GetString(int column) (ex. : reader.GetString(0) )
retourne la valeur de la colonne 0 de type String de l’enregistrement courant
2. Envoi d'une requête SELECT
OdbcCommand cmd = new OdbcCommand("SELECT * FROM ages"); GetInt32, GetBoolean, GetByte, GetDouble, GetFloat
OdbcDataReader reader = cmd.ExecuteReader(); idem pour des colonnes de type int, boolean, byte, double ou float
ADO.Net ADO.Net
Requêtes SQL précompilées Procédures stockées
1. Possibilité de définition de 1 ou +sieurs paramètres ! caractères ? Exemple de procédure stockée Transact-SQL (SQL Server)
OdbcCommand cmd = new OdbcCommand CREATE PROCEDURE [pubs].[GetRange]
("SELECT * FROM ages WHERE nom=? AND age>?",cx); @age int
AS
SELECT nom FROM ages WHERE age < @age
2. Valeurs des paramètres ajoutés à la commande GO
cmd.Parameters.Add(new OdbcParameter("","Bob"),cx);
cmd.Parameters.Add(new OdbcParameter("",Convert.ToInt32(5)),cx); Le code d’appel de la procédure
• new OdbcParameter( string name, object value ) OdbcCommand cmd = new OdbcCommand("GetRange",cx);
• paramètres ajoutés dans l'ordre de leur définition dans la requête cmd.CommandType = CommandType.StoredProcedure;
• name non significatif dans ce contexte (voir procédure stockée) cmd.Parameters.Add( new OdbcParameter("age",Convert.ToInt32(5) );
OdbcDataReader reader = cmd.ExecuteReader();
3. Exécution de la requête ...
CREATE TABLE comptes (nom VARCHAR(30) PRIMARY KEY, solde FLOAT CHECK(solde>=0) );
La transaction doit être
OdbcCommand cmd1, cmd2;
- validée (commit) ! les résultats ne sont visibles qu'à partir de ce moment cmd1 = new OdbcCommand("UPDATE comptes SET solde=solde+montant WHERE nom='Paul'",cx);
cmd2 = new OdbcCommand("UPDATE comptes SET solde=solde-montant WHERE nom='Bob'",cx);
- ou annulée (rollback)
OdbcTransaction trans = cx.BeginTransaction();
OdbcCommand cmd1 = new OdbcCommand("INSERT INTO ages VALUES ('Pierre',12)",cx);
OdbcCommand cmd2 = new OdbcCommand("UPDATE ages SET age=15 WHERE nom='Joe'",cx); try {
cmd1.Transaction = trans;
OdbcTransaction trans = cx.BeginTransaction(); cmd2.Transaction = trans;
cmd1.Transaction = trans; cmd1.ExecuteNonQuery();
cmd2.Transaction = trans; cmd2.ExecuteNonQuery();
trans.Commit();
cmd1.ExecuteNonQuery(); déclaration du début de la transaction
cmd2.ExecuteNonQuery(); }
catch( Exception e ) {
trans.Commit(); validation de la transaction trans.Rollback();
}
ADO.Net ADO.Net
Accès aux données en mode déconnecté Accès aux données en mode déconnecté
• par défaut c/s connecté vers SGBD • datasets : représentation mémoire des données d'un SGBD
+ 1 seule copie des données (SGBD) SELECT …
+ mises à jour simples adapter.Update(dataset)
rés
eau Data
connecté vs non connecté DataSet SGBD
Adapter
n messages petite taille SELECT …
vs 1 message grande taille
rés adapter.Fill(dataset)
eau
ADO.Net ADO.Net
Mise à jour d'un DataSet DataView
Modification d'une valeur Vue (pas de copie des données) sur une Datatable
table.Rows[0][0] = "Bill"; • séléction
adapter.Update(dataset);
• tri
Ajout d'une ligne
Mise à jour données dans la vue = maj des données dans la DataTable
DataRow myDataRow = table.NewRow();
myDataRow["nom"] = "John"; DataView view = new DataView(table);
myDataRow["solde"] = 123; view.RowFilter = "nom='Bob'"; // sélection de(s) Bob
table.Rows.Add(myDataRow); for( int i=0 ; i < view.Count ; i++ ) {
adapter.Update(dataset); view.Delete(i); // suppression aussi dans la DataTable
}
view.Sort = "nom, age DESC"; // d'abord pas nom puis par age décroissant
requete =
SELECT * FROM notes WHERE
Data netudiant=''; SELECT * FROM notes WHERE ''=''
DataGrid DataSet
Adapter SGBD ! toutes les notes !!
ADO.Net ADO.Net
Comparaison ADO.Net - JDBC Comparaison ADO.Net - JDBC