2009-04-20 12 views
1

私はVBでASP.NETアプリケーションを開発していますが、VBのSQLコマンドと接続を使用してページのデータを取得しています。私はそのように初期化された部分を両方持っています:値が存在しないと言っている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:条件に一致するCountをチェックしてゼロが返され、それがまっすぐに確認されて15が返されました。ありがとうございます。地球上では一致していない、なぜ時間が、私はあなたがこのような何かをしようとすることができると思い...

答えて

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などを使用しています。

Aditionallyは、読者に、読者は、データの読み取り問題がある場合は、エラーを発生させることはありません読み

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

この方法を確認してください。

EDITテスト目的のために1

、まず最初にあなたの条件を満たす行、第二1を取得します。この

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

そしてこの

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

をチェック、テーブルの総行数を取得します。そうすれば、問題がリーダーかデータソース(db)かどうかを確認できます。

0

SQL Serverを使用している場合SQL Serverプロファイラを使用して、実際にサーバーに送信されたクエリを確認してみてください。私のgessはlblTrip.Textがまだ設定されていないでしょう。

関連する問題