Meilleur auteur de réponses
C# si la valeur de OledbDataReader est null ou pas

Question
-
Bonjour voici un code qui recherche dans une base de données Access la présence (ou non) d'une valeur entrée dans un TextBox.
Si cette valeur est présente le code retourne bien le MessageBox d'erreur. Par contre si aucune données n'est trouvée dans la base, le bloc "Else" (quelque soit le code insérer à l'intérieur) est occulté est l'instruction se termine.
merci de votre aide.
#region Check If Groupement Exists string groupement = Convert.ToString(GroupTxtBox.Text); string queryCheck = ($"SELECT FOU_NAME FROM [FOURNISSEURS] WHERE FOU_NAME='{groupement}'"); comm = new OleDbCommand(queryCheck, conn); conn.Open(); using(OleDbDataReader reader = comm.ExecuteReader()) { while (reader.Read()) { /*Si le nom saisi dans la textbox exist dans la base :*/ if (reader!=null) { Messages.ErrorMessages("Ce Groupement existe déjà !"); GroupTxtBox.Text = string.Empty; GroupTxtBox.Focus(); } /*Si le nom saisi n'existe pas dans la base : */ else { // Code... } } } #endregion
JF Collombet ® CreateSpecificCulture
Réponses
-
Bonjour,
Vous avez changé la place de "if" et "while" dans ce dernier code. Est-ce que le code marche en utilisant premièrement "if" et puis "while" comme dans l'exemple que j'ai donné?
Cordialement,
Nina
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Jean-François Collombet vendredi 13 juillet 2018 16:15
Toutes les réponses
-
Bonjour Jean-François,
Il n'est pas nécessaire de vérifier si la variable reader est null. Il suffit de procéder d'après la valeur retournée par la méthode OleDbDataReader.Read :
using(OleDbDataReader reader = comm.ExecuteReader()) { bool b = reader.Read(); if(b) /*Si le nom saisi dans la textbox existe dans la base :*/ while(b) { Messages.ErrorMessages("Ce Groupement existe déjà !"); GroupTxtBox.Text = string.Empty; GroupTxtBox.Focus(); b = reader.Read(); } /*Si le nom saisi n'existe pas dans la base : */ else { Messages.ErrorMessages("Ce Groupement n'existe pas !"); } }
Cordialement,
Nina
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
-
Bonjour et merci pour votre réponse. Voici mon code réadapté. malheureusement même si les données n'existent pas dans ma base, le bloc else est toujours ignoré.
private void ValidGroupBtn_Click(object sender, RoutedEventArgs e) { string groupement = Convert.ToString(GroupTxtBox.Text); string queryCheck = ($"SELECT FOU_NAME FROM [FOURNISSEURS] WHERE FOU_NAME='{groupement}'"); comm = new OleDbCommand(queryCheck, conn); conn.Open(); using(OleDbDataReader reader = comm.ExecuteReader()) { bool b = reader.Read(); while (b) { /*Si le nom saisi dans la textbox exist dans la base :*/ if (b) { Messages.ErrorMessages("Ce Groupement existe déjà !"); GroupTxtBox.Text = string.Empty; GroupTxtBox.Focus(); conn.Close(); break; } /*Si le nom saisi n'existe pas dans la base : */ else { comm = new OleDbCommand("INSERT INTO [FOURNISSEURS] ([FOU_NAME]) VALUES (@FOU_NAME)", conn); comm.Parameters.AddWithValue("FOU_NAME", Convert.ToString(GroupTxtBox.Text)); conn.Open(); comm.ExecuteNonQuery(); conn.Close(); Messages.InformationMessage("Groupement ajouté avec succès."); } } } }
JF Collombet ® CreateSpecificCulture
-
Bonjour,
Vous avez changé la place de "if" et "while" dans ce dernier code. Est-ce que le code marche en utilisant premièrement "if" et puis "while" comme dans l'exemple que j'ai donné?
Cordialement,
Nina
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Jean-François Collombet vendredi 13 juillet 2018 16:15