2009-04-20 4 views
1

Je développe une application ASP.NET avec VB et utilise SQL Command and Connection dans VB pour saisir les données de la page. J'ai les deux parties initialisées en tant que telles:SQL Reader indiquant qu'aucune valeur n'existe, la requête semble correcte

travelQuery.CommandText = "SELECT [StartLoc], [EndLoc],[TravelTime], [AvgSpeed], [Distance] FROM [TravelTimes] WHERE [TripNum] = '" + lblTrip.Text + "'" 
travelConnection.ConnectionString = "..." 

eventQuery.CommandText = "SELECT [IncdntDate], [Roadway],..." 

Et ainsi de suite, comme ça. J'ai omis le eventQuery, parce que celui-ci fonctionne bien. La requête de voyage et la requête d'événement ont également la même chaîne de connexion. Le programme a l'exécution de la requête d'événement et si l'une des valeurs, RdwyID retourné s'inscrit dans une certaine plage, travelQuery s'exécute.

J'ai défini RdwyID à 187 dans le code pour le forcer à tirer et afficher les temps de déplacement, et quand j'essaye de le faire, il se bloque en disant qu'il n'y a pas de valeurs. Voici le code exact que j'utilise. Je fais les choses exactement de la même manière avec eventQuery où cela fonctionne bien. Je m'assure d'ouvrir et de fermer correctement la connexion. Le temps est correctement déclaré comme un tableau d'objets. Le TripNum Je vérifie la requête est une valeur constante dans la base de données avec un type de données de texte.

Dim rdwyID As Integer 
'rdwyID = events(9) - where the value is pulled from usually' 
rdwyID = 187 

If (rdwyID >= 186 And rdwyID <= 225) 
    FillWithTime("2", travelReader, time, newCell) 


Private Sub FillWithTime(ByVal TripNum As String, ByRef travelReader As SqlDataReader, ByRef TimeData() As Object, ByRef Cell As System.Web.UI.WebControls.TableCell) 

    lblTrip.Text = TripNum 
    travelReader = travelQuery.ExecuteReader() 
    travelReader.Read() 
    travelReader.GetValues(TimeData) 

    Cell.Text += "From: " + TimeData(0).ToString().Substring(9) + "<br />" 
    Cell.Text += "To: " + TimeData(1).ToString().Substring(9) + "<br />" 
    Cell.Text += "Travel Time: " + TimeData(2).ToString() + " minutes <br />" 
    Cell.Text += "Average Speed: " + TimeData(3).ToString() + " MPH <br />" 
    Cell.Text += "Distance: " + TimeData(4).ToString() + " miles <br />" 

End Sub 

Merci pour toute aide ou suggestion dont vous avez besoin. Editer: Apportez les modifications comme vous l'avez dit, et l'instruction if pour le lecteur d'exécution est évaluée à false. Je ne sais rien de travailler avec le lecteur, quelles sortes de conditions le feraient échouer? Merci beaucoup.

Édition 2: Vérification du nombre de correspondance pour la condition retourné zéro, et la vérification tout droit retourné 15. Merci beaucoup. Il est temps de comprendre pourquoi sur Terre il est ... ne correspond pas à

Répondre

0

Je pense que vous pourriez essayer quelque chose comme ça

travelQuery.CommandText = "SELECT [StartLoc], [EndLoc],[TravelTime], [AvgSpeed], [Distance] FROM [TravelTimes] WHERE [TripNum] = @trip" 
    ' Assuming trip as integer 
    travelQuery.CommandParameters.Add(@trip, Convert.ToInt32(lblTrip.Text)) 

De plus, le code ci-dessus soulèvera erreur si lblTrip.Text est pas un nombre, donc vous utiliseriez int.TryParse ou quelque chose de semblable.

Aditionally, dans le lecteur, vérifiez le lire

If (travelReader.Read()) Then Begin 
End If 

De cette façon, vous ne collecterez erreur si le lecteur a des problèmes de lecture des données.

EDIT 1

Pour des fins de test, vérifiez d'abord ce

travelQuery.CommandText = "SELECT COUNT(*) FROM [TravelTimes] WHERE [TripNum] = @trip" 

Et puis ce

travelQuery.CommandText = "SELECT COUNT(*) FROM [TravelTimes]" 

Tout d'abord, vous obtiendrez les lignes qui répondent à votre condition, le second , vous obtiendrez le nombre total de lignes pour la table, de cette façon, vous pouvez être sûr que le problème est le lecteur ou la source de données (db)

0

Si vous utilisez SQL Server: Essayez d'utiliser SQL Server Profiler pour consulter la requête qui est réellement soumise au serveur. Mon choix serait lblTrip.Text n'est pas encore défini.