我正在使用VB开发ASP.NET应用程序,并在VB中使用SQL命令和连接来获取页面数据。我将两个部分都初始化为:
travelQuery.CommandText = "SELECT [StartLoc], [EndLoc],[TravelTime], [AvgSpeed], [Distance] FROM [TravelTimes] WHERE [TripNum] = '" + lblTrip.Text + "'" travelConnection.ConnectionString = "..." eventQuery.CommandText = "SELECT [IncdntDate], [Roadway],..."
依此类推。我省略了eventQuery,因为那很好用。旅行查询和事件查询也具有相同的连接字符串。该程序将执行事件查询,然后如果返回的RdwyID值之一在一定范围内,则执行travelQuery。
我在代码中将RdwyID设置为187,以强制它拉出和发布行程时间,而当我尝试运行它时,它崩溃并说没有值。这是我使用的确切代码。我使用eventQuery可以正常工作的方式完全相同。我确保正确打开和关闭连接。时间被正确地声明为一个对象数组。
我要检查查询的TripNum是数据库中具有文本数据类型的常量值。
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
感谢您的任何帮助或建议。
编辑:进行更改,如您所说,执行读取器的if语句评估为false。我对与读者合作一无所知,什么样的条件会使它失败?谢谢一堆。
编辑2:检查与条件匹配的计数返回零,并直接向上检查它,返回15。非常感谢。是时候弄清楚为什么地球上不匹配了…
我认为您可能正在尝试这样的事情
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))
此外,如果lblTrip.Text不是数字,则上面的代码将引发错误,因此您将使用int.TryParse或类似方法。
另外,在阅读器中,检查阅读的内容
If (travelReader.Read()) Then Begin End If
这样,如果读者在读取数据时遇到问题,就不会引发错误。
编辑1
出于测试目的,请首先检查此
travelQuery.CommandText = "SELECT COUNT(*) FROM [TravelTimes] WHERE [TripNum] = @trip"
然后这个
travelQuery.CommandText = "SELECT COUNT(*) FROM [TravelTimes]"
第一个将获取满足您条件的行,第二个将获取表的总行数,这样您就可以确定问题是读取器还是数据源(db)