IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Verifier qu'une donnée existe dans access


Sujet :

C#

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 173
    Par défaut Verifier qu'une donnée existe dans access
    Bonjour,

    Voila je suis en train de faire une application pour interagir avec une base acces seul hic je bloque pour une fonction :
    Je voudrais faire une fonction qui vérifie que la donnée n'existe pas déjà dans la table, pour cela je rentre un string organe et un string famille dans un textbox et je vérifie que les données des textbox ne sont pas déjà présentent dans la bdd, or ma fonction détecte rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     public bool existe(string famille,string organe,string table)
            {
                //string queryString = "SELECT FROM " + table + "(Famille,Organe) values (?,?)";
                string queryString = "SELECT * FROM Organe WHERE Organe = " + "'" + organe + "'" + " AND Famille = '" + famille + "'";
                OleDbCommand cmd = new OleDbCommand(queryString, cn);
     
                cmd.Parameters.Add(new OleDbParameter("Famille", Convert.ToString(famille)));
                cmd.Parameters.Add(new OleDbParameter("Organe", Convert.ToString(organe)));
     
                int count = cmd.ExecuteNonQuery();
                if (count > 0)
                {
                    MessageBox.Show("Already exists");
                    return true;
                }
                else return false;
     
     
            }
    Voili Voilou bonne soirée.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    Il faut comprendre le code qu'on écrit.
    Faire F1 sur un type ou une méthode permet d'en apprendre plus.
    Avec F1 sur ExecuteNonQuery tu aurais pu voir que c'est fait pour tout ce qui insert/update/delete et retourne le nombre de ligne modifiées.
    Et que tu fais un select et que tu vérifies. Le nombre de lignes modifiées...

    C'est executereader qu'il te faut et hasrows
    D'ailleurs select 1 suffit, tu ne veux pas les données mais savoir s'il y a une ligne.
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    À cela on peut ajouter qu'on a d'abord une requête créée en dur, par concaténation de ses différents composants, sans aseptiser les chaînes de paramètre en entrée (=> injection SQL), puis un peu plus bas l'usage de paramètres sur la commande, dans un formalisme dont je ne suis pas sûr qu'il soit correct (il me semble que les noms de paramètres sont habituellement préfixés d'un @). On peut trouver un exemple clair dans la msdn.

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 173
    Par défaut
    Bonjour,

    Merci pour vos réponses, je vais essayer de trouver des infos sur les requêtes paramétrées.
    Je vous avoues que je débute avec Access et OleDB et je galère pas mal, j'essaye de faire une application graphique en c#pour gérer une base de données mais je trouve pas de cours réçent sur l'utilisation de C#avec Access...

    Si vous avez des infos n'hésitez pas

    Bonne journée !


    EDIT:

    Aujourd'hui j'ai ça pour ma classe base de donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    class BaseAccess
        {
            private OleDbConnection cn = new OleDbConnection();
            private bool connected = false;
     
            //=====================================================================================================
            private string DatabaseName => "Base_Rexx1.accdb";
            public bool isConnected => this.connected;
            public string pathBase => System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), @"SNCF\Projet REXX");
     
            //================================Constructeurs========================================================
     
     
     
     
            public BaseAccess()
            {
                if (cn.State == 0)
                {
                    string DatabaseNameL = System.IO.Path.Combine(pathBase, this.DatabaseName);
                    connexion(DatabaseNameL);
                }
            }
     
     
     
            public BaseAccess(string DatabaseNameL)
            {
                if (cn.State == 0)
                {
                    connexion(DatabaseNameL);
                }
            }
     
            //==============================Connexion a la base de données=========================================
     
            private void connexion(string db_name)
            {
                try
                {
                    cn.ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};", db_name);
                    cn.Open();
                    this.connected = true;
                    //MessageBox.Show("Connected !");
                }
                catch (Exception e)
                {
                    this.connected = false;
                    MessageBox.Show(e.Message, "Erreur!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            //===============================Fermer la base de données===============================================
     
            public void Close()
            {
                if (cn.State != 0)
                {
                    cn.Close();
                }
            }
     
            //=============================Inserer une ligne==============================================================
            public List<string> ReadMyData(string data, string table, int index, string l_famille)
            {
                string queryString = "SELECT " + data + " FROM " + table + " WHERE Famille = '" + l_famille + "'";
                List<string> donnees = new List<string>();
     
                if (cn.State != 0)
                {
                    OleDbCommand command = new OleDbCommand(queryString, cn);
                    OleDbDataReader reader = command.ExecuteReader();
     
                    while (reader.Read())
                    {
     
                        donnees.Add(reader.GetString(index));
                        Console.WriteLine(reader.GetString(0));
                    }
     
                    // always call Close when done reading.
                    reader.Close();
                }
                return donnees;
     
     
            }
     
            public List<string> ReadMyData(string data, string table, int index)
            {
                string queryString = "SELECT " + data + " FROM " + table;
                List<string> donnees = new List<string>();
     
                if (cn.State != 0)
                {
                    OleDbCommand command = new OleDbCommand(queryString, cn);
                    OleDbDataReader reader = command.ExecuteReader();
     
                    while (reader.Read())
                    {
     
                        donnees.Add(reader.GetString(index));
                        Console.WriteLine(reader.GetString(0));
                    }
     
     
                    reader.Close();
     
                }
                return donnees;
     
            }
     
            public bool existe(int idFamille,string famille,string organe,string table)
            {
                if(cn.State == 0)
                {
                    cn.Open();
                }
                string queryString = "SELECT 1 FROM  Organe WHERE idFamille = @idFamille AND Famille = @famille AND Abreviation = @organe;";
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = queryString;
                cmd.Connection = cn;
     
                //string queryString = "SELECT FROM " + table + "(Famille,Organe) values (?,?)";
                //string queryString = "SELECT 1 FROM " + table + " WHERE idFamille = " + "'@" + idFamille + "' AND Famille = " + "'@" + famille + "' AND Abreviation = " + "'@" + organe + "'";
                //cmd.Parameters.Add(new OleDbParameter("@table", table));
                cmd.Parameters.Add(new OleDbParameter("@idFamille", idFamille));
                cmd.Parameters.Add(new OleDbParameter("@Famille", famille));
                cmd.Parameters.Add(new OleDbParameter("@Abreviation", organe));
     
                OleDbDataReader reader = cmd.ExecuteReader();
     
                if (reader.HasRows)
                {
                    //MessageBox.Show("Already exists");
                    return true;
     
                }
     
                else
                { 
                    return false;
                }
     
     
     
            }
            public int getEquipement (string Lieux)
            {
     
                int idEquipement;
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "SELECT Numero FROM Equipement WHERE Lieux = @lieux;";
                //cmd.CommandType = CommandType.StoredProcedure; 
                cmd.Connection = cn;
                cmd.Parameters.Add(new OleDbParameter("@lieux", Lieux));
     
                //OleDbDataReader reader = cmd.ExecuteReader();
               idEquipement = (int)cmd.ExecuteScalar();
                return idEquipement;
            }
            public void ajouterOrgane(int idFamille,string famille,string abreviation,string table,string description,string planche,string symbole)
            {
                if(this.existe(idFamille, famille,  abreviation,  table))
                {
                    //MessageBox.Show("La donnee existe deja dans la base ! ");
                }
                else
                {
                    string queryString = "INSERT INTO " + table + "(idFamille,Famille,Abreviation,Description,Planche,Symbole) values (?,?,?,?,?,?)";
                    OleDbCommand command = new OleDbCommand(queryString, cn);
                    command.Parameters.Add(new OleDbParameter("@idFamille", Convert.ToInt32(idFamille)));
                    command.Parameters.Add(new OleDbParameter("@Famille", Convert.ToString(famille)));
                    command.Parameters.Add(new OleDbParameter("@Abreviation", Convert.ToString(abreviation)));
                    command.Parameters.Add(new OleDbParameter("@Description", Convert.ToString(description)));
                    command.Parameters.Add(new OleDbParameter("@Planche", Convert.ToString(planche)));
                    command.Parameters.Add(new OleDbParameter("@Symbole", Convert.ToString(symbole)));
                    try
                    {
                        command.ExecuteNonQuery();
                        //MessageBox.Show("Data Added");
     
                    }
                    catch (OleDbException ex)
                    {
                        MessageBox.Show(ex.Source);
                        //db.con.Close();
                    }
     
                }
            }
            /* public void supprimer(string famille,string organe, string table)
            {
                if(existe(famille,organe,table))
                {
                    string queryString = "DELETE FROM "+ table + " WHERE Famille = '"+famille+"'AND Organe = '" +organe +"'";
                    OleDbCommand cmd = new OleDbCommand(queryString,cn);
                    cmd.ExecuteNonQuery();
                }
                else
                {
                    MessageBox.Show("L'organe n'existe pas");
                }
            }*/
     
     
            //---------------------------------------------------------------------------
            // Return une table
            //---------------------------------------------------------------------------
            public DataTable DataTable(OleDbDataReader objRS)
            {
                DataTable dt = new DataTable();
                dt.Load(objRS);
                return dt;
            }
            //---------------------------------------------------------------------------
    et j'essaye d'executer cette fonction pour déja remplir une table access à partir d'un fichier excel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     OpenFileDialog opf = new OpenFileDialog();
                opf.ShowDialog();
     
                string excelPath = opf.FileName;
                    //System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), @"SNCF\Base_Rexx_excel");
                BaseAccess db = new BaseAccess();
     
                XSSFWorkbook hssfwb = new XSSFWorkbook();
     
                using (FileStream fluxConf = new FileStream(excelPath, FileMode.Open, FileAccess.Read))
                {
     
     
                    hssfwb = new XSSFWorkbook(fluxConf);
     
                }
     
     
                ISheet feuille = hssfwb.GetSheetAt(0);
                for (int row = 1; row <= feuille.LastRowNum; row++)
                {
                    string lieux;
                    string famille;
                    int idFamille;
                    string abreviation;
                    string description;
                    string planche;
                    string symbole;
     
                    try
                    {
                        lieux = feuille.GetRow(row).GetCell(0).StringCellValue;
                    }
                    catch
                    {
                        lieux = "NA";
     
                    }
                    idFamille = db.getEquipement(lieux);
                    try
                    {
                        famille = feuille.GetRow(row).GetCell(2).StringCellValue;
                    }
                    catch
                    {
                        famille = "NA";
     
                    }
     
                    try
                    {
                        abreviation = feuille.GetRow(row).GetCell(3).StringCellValue;
                    }
                    catch
                    {
                        abreviation = "NA";
     
                    }
     
                    try
                    {
                        description = feuille.GetRow(row).GetCell(4).StringCellValue;
                    }
                    catch
                    {
                        description = "NA";
     
                    }
     
                    try
                    {
                        planche = feuille.GetRow(row).GetCell(5).StringCellValue;
                    }
                    catch
                    {
                        planche = "NA";
     
                    }
     
                    try
                    {
                        symbole = feuille.GetRow(row).GetCell(6).StringCellValue;
                    }
                    catch
                    {
                        symbole = "err";
     
                    }
                    db.ajouterOrgane(idFamille,famille, abreviation, "Organe", description, planche, symbole);
     
                }
     
            }
    Le programme s'exécute bien jusqu'à cracher en me disant "mémoire du système insuffisante".

Discussions similaires

  1. verifier qu'une chaine existe dans une autre chaine
    Par firas scofield dans le forum C
    Réponses: 0
    Dernier message: 06/12/2015, 10h39
  2. Réponses: 1
    Dernier message: 10/03/2014, 14h13
  3. [ODBC] Verifier si une donnée existe dans la BDD
    Par thebarbarius dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 27/10/2010, 20h32
  4. verifier si deux données existe dans une table MSQL
    Par masoantoko dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/04/2010, 14h48
  5. Verifier si une donnée existe
    Par ririch dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 22/04/2009, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo