ADO.NET 9 Lionel Seinturier
ADO.NET
using System.Data;
using System.Data.SqlClient;
public class TestADONet {
public static void Main( String[] args ) {
SqlConnection cx =
new SqlConnection("Server=localhost;Database=test;");
cx.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM ages",cx);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read()) {
string nom = reader.GetString(0);
int age = reader.GetInt32(1);
Console.WriteLine( nom + " a " + age + " ans" );
}
cx.Close();
} }
Utilisation de ADO.NET (code complet)
ADO.NET 10 Lionel Seinturier
ADO.NET
Types de requêtes SQL
• "normale"
- interprétée à chaque exécution
• précompilée
- paramétrable
- préparée pour être exécutée plusieurs fois
- gérée par le programme
• procédure stockée
- paramétrable
- écrite dans le langage interne du SGBD (ex SQL Server Transac-SQL)
- gérée par le SGBD
+ masque schéma base - langage propriétaire (- évolution)
+ meilleures perf - risque de mélange
+ validées par rapport schéma base logiques traitement/donnée
ADO.NET 11 Lionel Seinturier
ADO.NET
Requêtes SQL précompilées
1. Possibilité de définition de 1 ou +sieurs paramètres ! caractères ?
SqlCommand cmd = new SqlCommand
("SELECT * FROM ages WHERE nom=? AND age>?",cx);
2. Valeurs des paramètres ajoutés à la commande
cmd.Parameters.Add(new Parameter("Bob"),cx);
cmd.Parameters.Add(new Parameter(Convert.ToInt32(5)),cx);
• new Parameter( string name, object value )
• paramètres ajoutés dans l'ordre de leur définition dans la requête
• name non significatif dans ce contexte (voir procédure stockée)
3. Exécution de la requête
SqlDataReader reader = cmd.ExecuteReader();
...
ADO.NET 12 Lionel Seinturier
ADO.NET
Procédures stockées
Exemple de procédure stockée Transact-SQL (SQL Server)
CREATE PROCEDURE [pubs].[GetRange]
@age int
AS
SELECT nom FROM ages WHERE age < @age
GO
Le code dappel de la procédure
SqlCommand cmd = new SqlCommand("GetRange",cx);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add( new Parameter("age",Convert.ToInt32(5) );
SqlDataReader reader = cmd.ExecuteReader();
...