Attaquer Base MySQL en C#

Attaquer Base MySQL en C# - C#/.NET managed - Programmation

Marsh Posté le 04-10-2006 à 20:17:48    

Bonjour...
 
Je souhaite realiser un programme qui me permet d'acceder, et modifier des infos d'un base de donnée MySQL...
En gros un logiciel pour gerer des commandes, des infos client etc...
Est ce réalisable, est dans quel niveau de difficulté car je voudrai faire ca en C# mode graphique (Appli windows) ?  
 
toute aide et explication sera la bienvenue :)


Message édité par Agmoh le 07-10-2006 à 18:59:36
Reply

Marsh Posté le 04-10-2006 à 20:17:48   

Reply

Marsh Posté le 04-10-2006 à 20:58:52    

Salut à toi,
 
Voilà un lien que tu seras certainement utile, perso, c'est la dll que j'utilise pour les connexions MySQL.
 
http://dotnet.developpez.com/faq/a [...] viadrivers
 
Ce n'est pas plus compliqué que d'utiliser SQL Express 2005 ... le seul problème que j'ai rencontré, a été qu'étant donné que j'ai un hébergement mutualisé chez OVH ... pas possible d'accéder à la base de données directement pour une Application Windows (et non web, je précise)
 

Reply

Marsh Posté le 05-10-2006 à 15:03:36    

Je confirme. J'ai testé en regardant le tuto present dans le site indiqué.
Si tu utilises VS C ou autre il faut rajouter la référence dans la partie référence dans ton projet "MySQLDriverCS"


Message édité par Berceker United le 05-10-2006 à 15:17:45
Reply

Marsh Posté le 05-10-2006 à 20:50:57    

Merci d'avoir répondu :)
j'ai vu aussi les driver MySql connector edité par mysql...
j'vais prendre ceux la car ceux que vous m'avez cité j'ai pas trop compris leur fonctionnement ...


Message édité par Agmoh le 05-10-2006 à 20:52:24
Reply

Marsh Posté le 06-10-2006 à 13:14:09    

Bon et bien j'ai un petit souci...
 
Je veux faire un formulaire windows dans lequel : J'ai une combobox dont les valeures sont puisé dans une table rayon.codeR afin que chaque produit ne puissent etre inséré dans un rayon inconnu.
 
Voici ce que j'ai essayé :  
 

Code :
  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. using MySql.Data.MySqlClient;
  8. namespace WindowsApplication1
  9. {
  10. /// <summary>
  11. /// Description résumée de frmaddpdt.
  12. /// </summary>
  13. public class frmaddpdt : System.Windows.Forms.Form
  14. {
  15.  private System.Windows.Forms.Label label1;
  16.  private System.Windows.Forms.Label label2;
  17.  private System.Windows.Forms.Label label3;
  18.  private System.Windows.Forms.Label label4;
  19.  private System.Windows.Forms.Label label5;
  20.  private System.Windows.Forms.Label label6;
  21.  private System.Windows.Forms.TextBox reference;
  22.  private System.Windows.Forms.TextBox nom;
  23.  private System.Windows.Forms.RichTextBox desc;
  24.  private System.Windows.Forms.TextBox prix;
  25.  private System.Windows.Forms.TextBox stock;
  26.  private System.Windows.Forms.Button ajouterpro;
  27.  private System.Windows.Forms.ComboBox comboBox1;
  28.  private MySqlConnection Connection = new MySqlConnection();
  29.  private MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
  30.  private MySqlDataReader rdr = new MySqlDataReader();
  31. [...]
  32. private void frmaddpdt_Load(object sender, System.EventArgs e)
  33.  {
  34.   string ConnnectionStr = String.Empty;
  35.   ConnnectionStr = "Database=dbtest;Data Source=localhost;User Id=roottest;Password=test";
  36.   Connection.ConnectionString = ConnnectionStr;
  37.   string MySQLCmd = "SELECT coder FROM rayon";
  38.   Connection.Open();
  39.   MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd, Connection);
  40.   rdr=MyAdapter.SelectCommand.ExecuteReader();
  41.   if(rdr!=null)
  42.   {
  43.    while (rdr.Read())
  44.    {
  45.     string s=rdr["coder"];
  46.     comboBox1.Items.Add(s);
  47.    }
  48.   }
  49.  }


 
 il me repond a ca :
 
"\WindowsApplication1\frmaddpdt.cs(32): Aucune surcharge pour la méthode 'MySqlDataReader' ne prend d'arguments '0'"
sur   private MySqlDataReader rdr = new MySqlDataReader();
 
"\WindowsApplication1\frmaddpdt.cs(241): Impossible de convertir implicitement le type 'object' en 'string' "sur string s=rdr["coder"];
 
 
Comment faire ?
 
 

Reply

Marsh Posté le 06-10-2006 à 13:57:40    

SqlCommand oCommand = new SqlCommand(ta_requete,ta_connexion);
SqlDataReader xxx = oCommand.ExecuteReader();
Ouppss ça c'est pour SQlServer mais je crois que ça ne change pas grand chose.


Message édité par Berceker United le 06-10-2006 à 13:58:43
Reply

Marsh Posté le 06-10-2006 à 14:22:35    

string s = (string)rdr["coder"];

Reply

Marsh Posté le 07-10-2006 à 19:02:36    

j'ai ajouté .tostring() et c'est ok !
Par contre petite question :
 
Mon appli posséde une dizaine de formulaire windows.
Ajouter produit,
Supprimer produit,
Etat client,
ajouter rayon etc...
 
Est ce que je dois connecter mon appli a MySQL au lancement de l'appli ou juste lorsque j'en ai besoin ? (car la je met la connexion a mysql lorsque l'on clique sur le bouton rechercher du formulaire en question et parfois c'est long pour la requete alors que ma table a 10 lignes...)
 
Sinon, Si je met ma base de données chez un hebergeur, est il vrai que mon appli ne pourra s'y connecter pour une question de securité ?  
EDIT :C'est juste a titre informatif, car cette appli est uniquement destiné a mes etudes... et non a une utilisation pro...
 
Merci !


Message édité par Agmoh le 07-10-2006 à 19:03:34
Reply

Marsh Posté le 07-10-2006 à 23:28:12    

Perso, j'ouvre et je ferme la connexion dès que j'en ai besoin ... enfin bon j'utilise principalement SQL Server 2005 Express ...  
 
Et sinon pour te connecter à une base de données chez l'hebergeur, tout dépend si cet hébergeur a effectivement le port MySQL ouvert (3306 il me semble), et puis si tu as une adresse à laquelle te connecter à ce serveur. En l'occurence, comme je le disais quelques posts plus haut, je dispose d'un hébergement mutualisé chez OVH et il m'est impossible de me connecter à ma base de données MySQL.
 

Reply

Marsh Posté le 08-10-2006 à 01:46:27    

Mysql ou SQLServer le problème reste le même. La connexion n'a pas besoin d'être ouvert en permanence. C'est une question des stratégies, Il faut gérer l'ouverture et fermeture selon les cas. Exemple une fonction qui appelle divers petites fonctions qui isolé vont chercher des info dans la base. Chaque fonction se connecte à la base de données. Le problème, c'est le faite d'appeller la fonction principale va provoquer une succession d'ouverture fermeture dans le processus d'execution alors qu'une ouverture et une fermeture unique est plus judicieux.

Reply

Marsh Posté le 08-10-2006 à 01:46:27   

Reply

Marsh Posté le 11-10-2006 à 01:20:33    

A la base, la plupart des SGBD supportent sans problème plusieurs centaines de connexions concurrentes sans broncher.
 
Moi je suis donc plutôt de l'avis d'établir la connection au démarrage de l'appli, et de la fermer proprement quand on quitte.
 
L'avantage principal, c'est que ça permet de faire des transactions persistantes qui sont actives sur plusieurs forms à la suite (wizzard par exemple). En revanche, les risques de lock liés à cette utilisation sont plus grand : t'es en modif sur une ligne, tu vas boire un café => personne ne peut accéder à la ligne tant que t'es pas revenu...

Reply

Marsh Posté le 11-10-2006 à 01:23:37    

Un autre intérêt de la solution de garder la cnx ouverte, c'est de faire des curseurs dynamiques.
 
Genre t'as un datagrid dont les informations sont modifiables (et ça impacte directement la base à la moindre modification), ou mieux, un datagrid dont le contenu se met à jour automatiquement à chaque mise à jour dans la base par une tierce personne.
 
Ensuite, c'est à toi de voir si ce genre de fonctionnalités te sont utiles ou pas, puisqu'en effet, ouvrir une connection le matin à 9h et la fermer le soir à 19h, c'est charger le SGBD "pour rien", et risque de se retrouver avec des problèmes de "rollback segment fault" si tu ne gères pas proprement les exceptions et les fins de transactions.

Reply

Marsh Posté le 15-10-2006 à 11:43:26    

Est ce que vous connaissez un hebergeur donc les tables peuvent etre de type INNO-DB et que le port MySQL est ouvert pour que mon logiciel en C# passe ?
merci !

Reply

Marsh Posté le 15-10-2006 à 14:09:33    

C'est très rare car les hebergeurs savent tous qu'il n'est vraiment pas prudent de faire ce genre de chose. C'est lui demander d'abaisser ça sécurité. Le seul moyen c'est d'avoir un serveur dédier.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed