private void _processActivityRecords(SqlConnection conn, string activityId) { string queryString = " SELECT V.ActivityId, V.VehicleKey, V.DriverId, V.BatteryKey, V.Odometer, V.Bat_Energy," + " V.Seg_Curvature, V.Seg_Length, V.Seg_Slope, V.DrivingSegmentIndex, V.DrvEst_Eea, V.TimeStamp," + " (SELECT TOP(1) ISNULL(CAST(S.Eta AS VARCHAR(50)),'') + ';' + ISNULL(CAST(S.Eea AS VARCHAR(32)),'') + ';' + ISNULL(CAST(S.Dta AS VARCHAR(32)),'')" + " FROM dbo.T_TELEMETRY_DRIVING_STEPS AS S" + " WHERE V.TelemetryId = S.TelemetryId" + " ORDER BY S.Eta) AS EndEstimations" + " FROM dbo.T_TELEMETRY_VEHICLE AS V" + " WHERE V.ActivityId = '" + activityId + "'" + " AND V.IsManaged = 1 AND (V.RecordType = " + (int)TelemetryRecordType.DrivingPlanChanged + " OR V.RecordType = " + (int)TelemetryRecordType.DrivingRoadSegmentPassed + ")" + " ORDER BY V.RecordNo;"; var command = new SqlCommand(queryString, conn); var reader = command.ExecuteReader(); var counter = 0; var lastIndex = -1; TrackInfo trackInfo = null; DbRecord lastRecord = null; try { var record = new DbRecord(reader); while (reader.Read()) { record.Fetch(reader); var currIndex = record.GetInt("DrivingSegmentIndex"); if (currIndex == lastIndex) continue; if (currIndex < lastIndex) { _finalizeTrackInfo(trackInfo,lastRecord,counter); _trackList.Add(trackInfo); trackInfo = _initializeTrackInfo(record); counter = 1; } else { if (lastIndex == -1) trackInfo = _initializeTrackInfo(record); lastRecord = record.Clone(); counter++; } lastIndex = currIndex; _aggregateTrackInfo(trackInfo, record); } } finally { // Always call Close when done reading. reader.Close(); } }