VB.NET Recherche instruction indiquant que la requête ne retourne rien

jjg65 Messages postés 28 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 16 août 2011 - 30 déc. 2010 à 16:22
jjg65 Messages postés 28 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 16 août 2011 - 1 janv. 2011 à 03:04
Bonjour,
Me voici confronté a un épineux problème.
J'ai une requête qui fonctionne admirablement bien quand elle retourne quelque chose de concret. Par contre quand elle ne retourne rien j'ai un message d'erreur qui s'affiche lors de la compilation ce qui est fort dommageable puisque dans certain cas de figure dans mes reqûetes il n'y a rien a retourner.
En vb 6 il y avait l'instruction qui remplissait très bien cette fonction:
If rst.EOF = True Then
msgbox "pas de données"
else
While Not (rst.EOF)
....
rst.MoveNext
Wend
end if

En vb.net je n'ai pas trouvé d'instruction équivalente. J'ai essayé des choses avec BOF et EOF mais sans succès. Je recherche avant le Do While une instruction conditionnelle qui me permettrait de ne pas rentrer dans la boucle s'il n'y a rien à retourner.
Quelqu'un aurait-il une idée ?

Voici la requête :
'connexion à la base de données
Dim con As OleDb.OleDbConnection
con = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source= C:\Users\jean-jacques\Desktop\EI\Delegue.mdb;")
Dim cmd As New OleDb.OleDbCommand( _
"SELECT Min(FicRen_CompStadeComp.NumeroCompetitionStadeCompetition) AS var_min, Count([FicRen_CompStadeComp].[NumeroCompetitionStadeCompetition]) AS var_count " & _
"FROM CompetitionsStadeCompetition INNER JOIN FicRen_CompStadeComp ON CompetitionsStadeCompetition.NumeroCompetition_StadeCompetition = FicRen_CompStadeComp.NumeroCompetitionStadeCompetition " & _
"WHERE (CompetitionsStadeCompetition.Competition ""Championnat"") AND (FicRen_CompStadeComp.Rencontre ""Joué"");", con)
con.Open()
Dim dt As New DataTable
Dim rs As New DataSet
Dim data_reader As Data.IDataReader = cmd.ExecuteReader()
If ??? then
Do While data_reader.Read()
variable_valeur_minimum = data_reader.GetValue(0)
variable_valeur_count = data_reader.GetValue(1)
Loop
Else
msgbox "la requête ne retourne aucune donnée"
End if
con.Close()

3 réponses

Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
31 déc. 2010 à 21:35
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
31 déc. 2010 à 21:38
0
jjg65 Messages postés 28 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 16 août 2011
1 janv. 2011 à 03:04
Merci pour les 2 réponses. Après avoir bien galéré pendant 2 jours j'ai trouvé la solution à travers le code ci dessous et l'instruction suivante --> ((IsDBNull(SQLResult)) :

Dim SQLResult As Object
Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= C:\Users\jean-jacques\Desktop\EI\Delegue.mdb;"
Dim dbConnection As OleDb.OleDbConnection = New OleDb.OleDbConnection(connStr)
Dim SQL As New OleDb.OleDbCommand
dbConnection.Open()
SQL.Connection = dbConnection
SQL.CommandText = _
"SELECT Min(FicRen_CompStadeComp.NumeroCompetitionStadeCompetition) AS var_min, Count([FicRen_CompStadeComp].[NumeroCompetitionStadeCompetition]) AS var_count " & _
"FROM CompetitionsStadeCompetition INNER JOIN FicRen_CompStadeComp ON CompetitionsStadeCompetition.NumeroCompetition_StadeCompetition = FicRen_CompStadeComp.NumeroCompetitionStadeCompetition " & _
"WHERE (CompetitionsStadeCompetition.Competition ""Championnat"") AND (FicRen_CompStadeComp.Rencontre ""Pas Joué"");"
SQLResult = SQL.ExecuteScalar
If (IsDBNull(SQLResult)) Then
calcul_min_recherche_rencontre_a_encoder_playoff()
Else
variable_valeur_minimum = SQLResult
MsgBox((variable_valeur_minimum))
End If
0
Rejoignez-nous