ADO.NET запись навигации - PullRequest
       21

ADO.NET запись навигации

1 голос
/ 07 ноября 2008

Я занимался разработкой как в VB6, так и в VB.NET, и я использовал объекты ADODB в VB6 для обработки навигации по наборам записей (т. Е. Методы MoveFirst, MoveNext и т. Д.), И я использовал ADO.NET для обработки запросы в построчном порядке (т. е. для каждой строки в таблице. Строки ...)

Но теперь я, кажется, столкнулся с дилеммой. Сейчас я строю программу в VB.NET, где мне нужно использовать эквивалентную функциональность команд Move старого объекта Recordset. Есть ли в VB.NET какой-то объект, который поддерживает эту функцию, или мне нужно прибегнуть к использованию старого COM-объекта ADODB?

Edit: просто для пояснения, я хочу, чтобы пользователь мог перемещаться по запросу, двигаясь вперед или назад. Цикл по строкам - простая задача.

Ответы [ 4 ]

2 голосов
/ 07 ноября 2008

Все зависит от использования: Если вам нужно только перечислить результаты одного или нескольких запросов, вам следует использовать DataReader. DOK указал, это только для чтения и только вперед, так что это быстро. http://www.startvbdotnet.com/ado/sqlserver.aspx

Если вам нужно перемещаться по записям, вы должны использовать набор данных. http://www.c -sharpcorner.com / UploadFile / raghavnayak / DataSetsIn.NET12032005003647AM / DataSetsIn.NET.aspx

Набор данных также имеет преимущество работы «отключен», поэтому вы строите всю логику, и только когда вам нужны данные, вы вызываете метод Fill. Набор данных заполняется, и вы можете начать работать с данными, теперь отключенными от БД.

Надеюсь, это поможет, Бруно Фигейредо http://www.brunofigueiredo.com

2 голосов
/ 07 ноября 2008

Нет необходимости возвращаться к плохим старым временам. Если вы можете привести пример псевдокода, я могу перевести на vb.net для вас.

Это своего рода общий способ сделать это.

Dim ds as DataSet

'populate your DataSet'

For each dr as DataRow in ds.Tables(<tableIndex>).Rows
  'Do something with the row'

Next

Per Edit 1: пользователь будет перемещаться по результатам, а не по запросу. Итак, вы хотите либо: а) получить результаты и отобразить для них только текущий индекс строки ds.Tables.Row (), либо б) выполнить новый запрос с каждой навигацией (не очень эффективный вариант).

За комментарий: нет. Но пользователь обычно не будет работать в интерактивном режиме с такой базой данных. Вам нужно будет получить свой набор данных / таблицу результатов и использовать кнопки, чтобы извлечь соответствующую строку из набора данных / таблицы.

  • Первая строка - DataTable.Rows (0)
  • Последняя строка - DataTable.Rows (DataTable.Rows.Count-1)
    • для любой строки между ними (сохраните текущий отображаемый индекс строки в вашем приложении), затем вызовите
  • DataTable.Rows (currentRowIndex -1) для предыдущего и
  • DataTable.Rows (currentRowIndex +1) для следующего.
0 голосов
/ 07 ноября 2008

Вот краткий пример использования устройства чтения данных:

            Dim cmd As New OleDb.OleDbCommand(sql, Conn) 'You can also use command parameter here
            Dim dr As OleDb.OleDbDataReader
            dr = cmd.ExecuteReader

            While dr.Read

          ‘Do something with data
          ‘ access fields
          dr("fieldname")
          ‘Check for null
          IsDBNull(dr("fieldname"))

            End While

            dr.Close()
0 голосов
/ 07 ноября 2008

В .Net есть много способов сделать это. Мне нравится использовать DataReader, который может возвращать несколько наборов записей. Вы можете перебирать его записи, используя While DataReader.Read.

Одним из преимуществ использования DataReader является то, что он предназначен только для пересылки и только для чтения, поэтому он быстрый и легкий.

Чтобы позволить пользователю перемещаться по всем записям по одной, вы не хотите держать DataReader открытым, пока пользователь выполняет навигацию. Вы можете читать записи DataReader в объекты. Или вы можете извлечь записи в DataSet и отображать DataRows из DataTable по одному.

Я бы посоветовал вам, если возможно, получить все записи сразу, если их не слишком много. Это сохранит повторные вызовы в базу данных.

С другой стороны, если записей много, вы можете получить первые несколько (скажем, 10 или 20) и получить следующий набор записей только с помощью нового вызова базы данных, если пользователь щелкает за пределами исходного набора , Это ленивая загрузка.

...