Gérer une base de donnée MySQL avec ASP.net et C#, comparaison avec PHP

18. April 2010 by Didier.BOFF

Bases de données avec ASP.net / C# et parallèle avec PHP/MySQL

Plan :

       I.            Introduction

     II.            Connexion à la base

A.    Les fournisseurs de données

B.    La ConnectionString

C.    Exemple comparatif ASP.net/PHP

  III.            Effectuer un Select

A.    L’objet Command

B.    L’objet DataReader

C.    Exemple comparatif ASP.net/PHP

 IV.            Update de la base

A.    La méthode ExecuteNonquery()

B.    Exemple comparatif ASP.net/PHP

    V.            Conclusion

Annexe : Installer un driver ODBC pour MySQL

 

I.       I. Introduction

Cet article s’adresse aux développeurs débutants ayant une première expérience en XHTML, SQL et ASP.net / C#, particulièrement à ceux ayant déjà manipulé des bases de données en PHP/MySQL. Un parallèle sera fait avec ce langage, en rouge à la fin de chaque section.

Au cours d’une première partie, nous verrons une méthode permettant de se connecter à différents types de bases de données, notamment SQL Server, Access et MySQL. Les parties suivantes expliqueront comment opérer sur une base avec des requêtes SQL.

 

II. Connexion à la base

A. Les fournisseurs de données

ASP.net peut accéder aux différents types de bases de données grâce à un système de fournisseurs de données (data provider).

Le choix du provider dépend de nos besoins et nous l’expliciterons en utilisant un namespace approprié.

Voici les quatre data provider à connaitre, leur utilité et leur namespace :

Fournisseur de données 

Domaine d’application

Namespace

SQL Server Provider

MS SQL 7.0 et supérieur

System.Data.SqlClient

OLE DB Provider*

Ex : MS Access

System.Data.OleDb

OBDC Provider*

Ex : MySQL

System.Data.Odbc

Oracle Provider

Oracle Database 8i et supérieur

System.Data.OracleClient

*Notons qu’OleDB (Object Linking and Embedding, Database) et ODBC (Open Database Connectivity) permettent  d’établir une connexion avec (potentiellement) n’importe quelle base de données. Pour cela, ils sont employés en conjonction avec un driver selon le type de base utilisée. En annexe est présenté le driver ODBC MySQL pour Windows.

Les data providers ont chacun une façon différente de gérer l’accès à la base de donnée, cependant la méthode de connexion se ressemble pour tout les fournisseurs de données : on utilise la classe « Connexion ». Cette classe se présente différemment selon le provider utilisé (seul son nom change).

Ci-dessous est présentée la syntaxe différentes bases :

Provider

SQL Server

OleDB

OBDC

Oracle

Connexion

SqlConnection

OleDbConnection

ObdcConnection

OracleConnection

Exemple  d’instanciation de Connection avec SQL Server :

            SqlConnection myConnection = new SqlConnection() ;

B. ConnexionString

Une fois « Connection » instanciée, nous avons besoin de l’initialiser avec des paramètres tel que le mot de passe et le nom de la base. Pour cela on utilise le « ConnectionString » : un champ string de l’objet « Connection » ou l’on renseigne les paramètres de connection.

Exemple avec SQL Server :

myConnection.ConnectionString = "Data Source=localhost ; Initial Catalog=Pubs ; User ID=Dblast ; Password=Supinf0;” ;

Exemple avec ODBC et MySQL :

myConnection.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=127.0.0.1;DATABASE=maBase;UID=Dblast;PWD=Supinf0;" ;

 

Une autre possibilité consiste à passer un string au constructeur overloadé de l’objet connection.

Exemple avec OleDB et Access:

string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False; " ;

OleDbConnection myConnection = new OleDbConnection(ConnectionString) ;     

 

Enfin, une troisième et dernière possibilité permet de stocker différentes chaines de connection dans le fichier web.config, de façon à pouvoir les utiliser par un nom (relativement) plus explicte. Il suffit d’ajouter un fils <connectionStrings> à <configuration>, dans lequel on renseigne l’élément <add> avec les champs « name » et « connectionString » :

<connectionStrings>

<add name="Mysql" connectionString="DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;DATABASE=maBase;UID=Dblast;PWD=FTW;"/>

</connectionStrings>

( note : Attention, l’élément <configSections> ne peut être précédé par <connectionStrings> ni aucun autre ! C’est l’élément racine apres <configuration> )

L’élément ainsi ajouté peut être affecté à la connection string en passant par l’objet « WebConfigurationManager » :

string ConnectionString = WebConfigurationManager.ConnectionStrings["Mysql"].ConnectionString;

Cet utilisation du fichier web.config nécessite le namespace “System.Web.Configuration“.

Pour en savoir plus sur les paramètres de ConnectionString , je vous conseille fortement d’aller sur le site : http://www.connectionstrings.com/ la référence sur le sujet. Vous pourrez y trouver tout les détails nécessaires à leur utilisation. Vous constaterez au passage la grande variété de bases de données existantes et les data providers supplémentaires (par exemple DB2 .NET pour les bases IBM).

Une fois l’objet connection instancié avec son ConnectionString, il ne reste plus qu’à exécuter sa méthode Open() tel que : myConnection.Open()

De même pour terminer la connexion, on utilise la méthode Close().

C. Exemple de synthèse et parallèle avec PHP/MySQL :

Dans cet exemple, nous nous connectons en local à une base  MySQL appelée « Supinfo » avec l’utilisateur « student » et le mot de passe « ftw ». Le driver ODBC MySQL 5.1 (disponible en annexe avec sa procédure d’installation) est alors utilisé avec ASP.net.

ASP.net

1. string ConnectionString = “DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost;DATABASE=Supinfo;UID=student;PWD=ftw;”

2. OdbcConnection MyConnection = new OdbcConnection(ConenctionString);

3. myConnection.Open() ;

4. // Data retrieving

5. myConnection.Close() ;

PHP

1. $ConnectionString =   mysql_connect('localhost', 'student', 'ftw');

2.  mysql_select_db('Supinfo',$ConnectionString);

3.  // Data retrieving

4.  mysql_close($ConnectionString);

 

III. Effectuer un Select

Nous venons de voir l’existence d’un objet connection similaire pour chaque data provider, de la même façon il existe des objets Command et DataReader, utilisables pour récupérer des données dans la base.

Comme vous l’aurez sans doute remarqué, il faut simplement ajouter le nom du data provider utilisé pour se servir de la classe correspondante, par exemple :

OdbcCommand / SqlCommand / OleDbDataReader / OracleDataReader

Command servira à enregistrer nos requêtes alors que DataReader enregistrera les données.

A.L’objet Command

L’objet Command s’utilise avec deux attributs : Connection et CommandText. Très simplement, Connection est de type Connection et CommandText retient une requête SQL de type string. On peut affecter une valeur aux attributs dès l’instanciation grâce au constructeur overloadé de Command : Command(CommandText, Connection) .

B. L’objet DataReader

Une fois notre objet Command créé, on ajoute dans le code l’objet DataReader qui n’a pas besoin de paramètre. En effet, cet objet se contente de retenir les données (à la manière d’une ressource retourné par mysql_query() en php).

Le plus simple pour lire les données sera d’exécuter la méthode ExecuteReader() de Command, qui pour génère un objet de type DataReader. On l’utilisera dans une boucle pour récupérer les entrées des champs d’une table, grâce à sa méthode read() qui retourne une par une chaque entrée dans un tableau d’association avec les champs (comme mysql_fetch_array() en php).

C. Exemple

Dans l’exemple suivant, nous effectuons un SELECT * sur une table ‘élèves’ d’une base Supinfo, selon les cinq étapes qui suivent :

1. On affecte la requête à la variable « commandText »

2. Connexion à la base Supinfo (vue en première partie)

3. On récupère la ressource SQL dans « myCommand »

4. On boucle dans le « reader » pour afficher les entrées de la table

5. On ferme la connexion

Exemple en ASP.net :

1. string commandText = “SELECT * FROM élèves” ;

2. string ConnectionString = “DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;DATABASE=Supinfo;UID=student;PWD=ftw;”

2. OdbcConnection myConnection = new OdbcConnection(ConenctionString) ;

2. myConnection.Open() ;

3. OdbcCommand myCommand = new OdbcCommand(commandText, myConnection) ;

4. OdbcDataReader reader ;

4. reader = myCommand.ExecuteReader();

4. while( reader.read() ) { Response.Write(“<p>” + reader[ ID“]  + “</p>”) }

5. myConnection.Close() ;


Equivalent en PHP :

1. $commandText = ‘SELECT * FROM élèves’ ;

2. $ConnectionString = mysql_connect('localhost', 'student', 'ftw');

2. mysql_select_db('Supinfo', $ConnectionString);

3. $myCommand = mysql_query($commandText) ; 

4. while( $reader = mysql_fetch_array($myCommand) ) { echo ‘<p>’ . $reader[‘ID’] . ‘</p>’; }

5.  mysql_close($ConnectionString);

 

IV. Update de la base

Il nous reste à voir comment insérer des données dans la base, ce qui ne sera pas bien long.

A. La méthode ExecuteNonquery()

Pour ce faire, nous aurons uniquement besoin de l’objet Command vue précédemment. En ajoutant une commande SQL d’update ou d’insertion à son attribut CommandText, il suffira d’exécuter la méthode ExecuteNonQuery() qui retourne un entier : utile pour savoir combien d’entrées ont étés mise à jour / insérés.

B.Comparatif ASP.net / PHP 

Dans ce dernier exemple nous insérons simplement trois entrées ‘19,5’, ‘15’, ’17,5’ dans le champ note d’une table « TpASP » et nous retournons le nombre d’entrées affectées.

Exemple ASP.net :

1. string commandText = “INSERT INTO TpASP(note) VALUES (’19,5’, ‘15’, ’17,5’)” ;

2. string ConnectionString = “DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;DATABASE=Supinfo;UID=student;PWD=ftw;”

2. OdbcConnection myConnection = new OdbcConnection(ConenctionString) ;

2. myConnection.Open() ;

3. OdbcCommand myCommand = new OdbcCommand(commandText, myConnection) ;

4. int affectedRows ; // facultative, pour afficher le nombre d’insertion

4. affectedRows = myCommand.ExecuteNonQuery() ; 

4. Response.Write(<p> + affectedRows.ToString() + “</p>“) ;

5. myConnection.Close() ;

équivalent PHP :

1. $commandText = ‘INSERT INTO TpASP(note) VALUES (’19,5’, ‘15’, ’17,5’)’;

2. $ConnectionString = mysql_connect('localhost', 'student', 'ftw');

2. mysql_select_db('Supinfo', $ConnectionString);

3. $myCommand = mysql_query($commandText) ; 

4. echo mysql_affected_rows();

5.  mysql_close($ConnectionString);

 

V.Conclusion

Ayant moi même développé en PHP avant d’apprendre ASP.net, les exemples des parties 2 et 3 s’appuient évidement sur MySQL. Cependant il faut garder à l’esprit que l’utilisation d’un driver (ODBC ou OleDB, au choix) ralenti la communication entre le serveur et la base. Il est donc plus judicieux d’utiliser ASP.net avec une base de donnée SQL Oracle ou Microsoft, pour ceux qui en ont la possibilité. En effet, les data provider correspondants permettent des performances plus élevés car ils accèdent directement à la base, sans passer par une couche supplémentaire.

Il faut également savoir que les classes exploitées dans ce document font parties de l’ensemble ADO.net (ActiveX Data Objects), qui fournit des méthodes d’exploitation de bases de données, mais il existe une nouvelle solution : LINQ. Sans rentrer dans les détails, LINQ permet d’envoyer des requêtes qui remplacent SQL, sns passer par un « Data Adapter ». C’est une technologie prometteuse et en plein essor.


Sources et liens :

Data Set et Data Adapter :

http://www.beansoftware.com/ASP.NET-Tutorials/DataSet-DataAdapter.aspx

Fournisseurs de données .NET Framework (ADO.NET)

http://msdn.microsoft.com/fr-fr/library/a6cd7c08.aspx

Connexion à MySQL avec C# et ODBC :

http://www.java2s.com/Code/ASP/ADO.net-Database/MySQLODBCconnectionC.htm

http://primaryobjects.com/CMS/Article68.aspx

http://dev.mysql.com/tech-resources/articles/dotnet/index.html

Connexion à Access et MSSQL :

http://www.aspfr.com/tutoriaux/ASP-BASE-DONNEES-BASES-DONNEES-ACCESS-SQL_9.aspx

LINQ avec C# et MySQL :

http://www.programmez.com/tutoriels.php?tutoriel=102&titre=Utilisation-de-LINQ-avec-la-base-MySQL

Livre : Beginning ASP.NET 3.5 in C# 2008: From Novice to Professional, Second Edition

http://apress.com/book/view/1590598911

// N’oubliez pas d’aller voir http://www.connectionstrings.com/ pour connaitre les paramètres de ConnectionString dont vous avez besoin.

 

Annexe : Installer un driver ODBC pour MySQL

 

Premièrement, nous avons besoin d’installer la dernière version du driver ODBC MySQL (5.1.6 à l’heure où j’écris ces lignes) disponible sur le site de MySQL :

http://dev.mysql.com/downloads/connector/odbc/5.1.html

Il s’agit du fichier « mysql-connector-odbc-5.1.6-win32.msi » pour windows, une rapide recherche sur google vous évitera l’inscription sur le dit site.

Une fois installé, ouvrez le panneau de configuration (outils d’administration pour Seven) puis « Sources de données (ODBC) », cliquez alors sur "ajouter".

Apres la sélection du driver, vous devrez le configurer avec un nom, une description et des identifiants.

Voilà, il ne vous reste plus qu’à utiliser une connexion string appropriée, par exemple :

connectionString="DRIVER={MySQL ODBC 5.1 Driver}; SERVER=127.0.0.1;DATABASE=maTable;UID=root;PWD=;";

Le driver est parfaitement utilisable avec PhpMyAdmin de WampServer. Comme ca, les dev PHP ne sont pas dépaysés !

ADO.NET, C#

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading

captcha

*