Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

4 février 2014 2 04 /02 /février /2014 01:33

1-Préparation

 

MySQL 5.6.16

http://dev.mysql.com/downloads/file.php?id=450945  

Normalement le connector .NET est compris dans le package (sinon http://dev.mysql.com/downloads/connector/net/6.8.html)

 

Il faut ajouter une référence dans son projet à MySql.Data.dll (située dans le répertoire C:\Program Files (x86)\MySQL\Connector NET 6.8.3\Assemblies\v4.5)

 

Ajouter using MySql.Data.MySqlClient;  en haut de ses pages

   

MySqlConnection, MySqlCommand, MySqlDataReader, etc. : Se connecter à une base MySQL est relativement simple .De la même manière qu’avec une base Access ou SQL Server on va utiliser une connexion, des commandes, des datareaders et utiliser les méthodes ExecuteNonQuery(),ExecuteScalar() ,...Il est également possible d’exécuter des procédures stockées .

 

La documentation sur le connector .NET http://dev.mysql.com/doc/connector-net/en/index.html

 

Le PL/SQL diffère un peu du T-SQL.Il faudra par exemple préférer les apostrophes aux crochets.

 

Exemple de création de base de données simple . Deux tables (Client et Category) ayant une clé primaire auto incrémentée , et une relation (un client a une catégorie) et une procédure stockée

CREATE TABLE `dbdemo`.`client` (

  `Id` INT NOT NULL AUTO_INCREMENT,

  `Name` VARCHAR(45) NOT NULL,

  `Email` VARCHAR(100) NULL,

  `CategoryId` INT NOT NULL,

  PRIMARY KEY (`Id`));

 

CREATE TABLE `dbdemo`.`category` (

  `Id` INT NOT NULL AUTO_INCREMENT,

  `Name` VARCHAR(50) NOT NULL,

  PRIMARY KEY (`Id`));

 

ALTER TABLE `dbdemo`.`client`

ADD INDEX `CategoryId_idx` (`CategoryId` ASC);

ALTER TABLE `dbdemo`.`client`

ADD CONSTRAINT `CategoryId`

  FOREIGN KEY (`CategoryId`)

  REFERENCES `dbdemo`.`category` (`Id`)

  ON DELETE NO ACTION

  ON UPDATE NO ACTION;

 

CREATE PROCEDURE `GetAllClients`()

BEGIN

SELECT `Id`, `Name`, `Email`, `CategoryId`

from `client`;

End                    

 

2-La chaine de connexion

Une aide si besoin http://www.connectionstrings.com/mysql-connector-net-mysqlconnection/

Il est possible de la stocker dans le fichier de configuration

<connectionStrings>

        <add name="dbConnectionString" connectionString="server=localhost;user id=root;password=monmotdepasse;database=dbdemo" providerName="MySql.Data.MySqlClient" />          

    </connectionStrings>

 

3- Exécuter une requête /récupérer une liste   

               public List<Client> GetClients()

        {

            List<Client> clients = new List<Client>();

            using (MySqlConnection connection = Sql.Instance.GetConnection())

            {

                using (MySqlCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "SELECT `Id`, `Name`, `Email`, `CategoryId` FROM `client`;";

                    using (MySqlDataReader reader = command.ExecuteReader())

                    {

                        while (reader.Read())

                        {

                            Client client = new Client();

                            client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                            client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                            client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                            client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                            clients.Add(client);

 

                        }

                    }

                }

            }

            return clients;

        }

 

4 – Procédure stockée

Un autre exemple cette fois avec une procédure stockée .Je récupère le client par sa clé primaire

                         public Client GetClient(int id)

             {

                    Client client = new Client();

                    using(MySqlConnection connection = Sql.Instance.GetConnection())

                    {

                           using (MySqlCommand command = connection.CreateCommand())

                           {

                                  command.CommandType = CommandType.StoredProcedure;

                                  command.CommandText = "GetClient";

                                  command.Parameters.Add(new MySqlParameter("parid", id));

 

                                  using (MySqlDataReader reader = command.ExecuteReader())

                                  {

                                        while (reader.Read())

                                        {

                                               client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                                               client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                                               client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                                               client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                                        }

                                  }

                           }

                    }

                    return client;

             }

 

Je passe ici le paramètre parid, portant le même nom que le paramètre de la procédure stockée

CREATE PROCEDURE `GetClient`(parid int)

BEGIN

SELECT `Id`, `Name`, `Email`, `CategoryId`

from `client`

where `Id`=parid;

 

5-Récupérer la clé auto incrémentée après un ajout

command.CommandText = "SELECT LAST_INSERT_ID()";

result = Convert.ToInt32(command.ExecuteScalar());

 

6 – ADO.NET Entity Framework et MySQL

Rien de plus facile

dbdemoEntities mySqlDemoEntities = new dbdemoEntities();

// affichage d'une liste

DbSet<client> clients = mySqlDemoEntities.client;

dataGridView1.DataSource = clients.ToList();

        

// OU

// utilisation de la procédure stockée GetAllClients()

dataGridView1.DataSource = mySqlDemoEntities.GetAllClients();

 

Partager cet article

Repost 0
Published by Romagny13 - dans ADO.NET
commenter cet article

commentaires