我正在使用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.非常感谢。是时候弄明白为什么在地球上它不匹配......
答案 0 :(得分:0)
我认为你可能会尝试这样的事情
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)
答案 1 :(得分:0)
如果您使用的是SQL Server:尝试使用SQL Server Profiler查看实际提交给服务器的查询。我的gess将是lblTrip.Text尚未设置。