Il y a plusieurs chose à voir dans ton code.
Déjà la façon dont tu ouvre ta commande, le fait de faire quelque part:
MySqlConnection wConnexion = new MySqlConnection();
Puis plus loin:
Ce n'est pas bon (bien que je ne connaisse pas la lib MySql), en .Net on procède plutôt comme suis:
1 2 3 4 5 6 7 8 9
| using (SqlConnection sqlConnection = new SqlConnection(_strChaineDeConnectionSQL))
{
SqlCommand sqlCommand = new SqlCommand(strNomProcedure, sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
AttacherParametres(sqlCommand, objParametres);
sqlConnection.Open();
return sqlCommand.ExecuteNonQuery();
} |
(Pense bien sur à utiliser des MySql[...], pour tes classes)
Ensuite, un singleton n'est pas nécessaire, mais la séparation de ta partie "Accès à la base de données", du reste du code est presque indispensable. Tout simplement pour clarifier ton code, et isolé les différentes parties qui n'ont pas besoin d'être aussi fortement lié.
Je conseil de réaliser une classe, static pour avoir simple.
Dans cette classe, tu rassemble tes méthode d'accès à la base, un p'tit exemple:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| static class DataProvider
{
private static readonly string _connectionString;
//Constructeur "static", nouveauté C# 4 me semble
static DataProvider()
{
//CONFIGURATION => si tu as un fichier de configuration pour les connection strings (ce qui est mieux), sinon mets directement ta ConnectionString
_connectionString = ConfigurationManager.ConnectionStrings["MySql.ConnectionString"].ConnectionString;
}
public static int ExecuteNonQuery(string query)
{
using (MySqlConnection connection = new MySqlConnection(_connectionString))
{
MySqlCommand command = new MySqlCommand(query, connection);
connection.Open();
return command.ExecuteNonQuery();
}
}
} |
En procédant ainsi, tu peux appeler de n'importe quelle Form de ton programm:
DataProvider.ExecuteNonQuery("Insert ...");
Pour aller plus loin, je te conseil également de ne pas laisser de SQL dans les forms, fait des méthodes dans le DataProvider qui englobe le tout. Par exemple une méthode "Insert{truc}" qui prend en paramètres ce qui va bien:
1 2 3 4 5
|
public static int InsererTruc(string nom, string prenom, string message)
{
//...
} |
Pour plus d'info sur les paramètres et les commandes, je te conseil d'aller voir par là.
En espérant t'avoir aidé
Partager