Похоже, вы пытаетесь записать VB.Net-эквиваленты в VB6 .MoveLast, .MoveFirst, .Recordset, .MoveNext
и т. Д.
.Recordset
Вы очень близкик вашему решению с помощью функции returnTable, которую вы создали.Datatables - это просто коллекции объектов DataRow, которые немного отличаются от объектов набора записей в VB6.Вы создали DataTable с помощью функции .Net:
Dim data19 as new datatable
Data19 = returnTable("select id from headers where type=12")
В этом случае Data19 - это DataTable, который заменяет набор записей в примере VB6.
.MoveLast
В вашем примере VB6 причина использования .MoveLast
состоит в том, чтобы выставить количество записей в наборе записей.Количество записей неизвестно, пока вы не перейдете к последней записи.После перехода к последней записи вы можете загрузить счетчик в переменную.
С ADO.Net вам не нужно использовать .MoveLast
, чтобы получить счет.Вы можете просто получить количество строк следующим образом:
Dim row_count As Integer = Data19.Rows.Count
Ниже вы увидите, что эта переменная не нужна при преобразовании в .Net.Вы используете его в VB6, чтобы узнать, сколько записей нужно пройти (и когда остановить).В .Net вы будете использовать For Each.. Next
для достижения той же цели.
.MoveFirst
Для вашего примера, .MoveFirst
используется только потому, что вы использовали .MoveLast
чтобы получить количество записей.Для того, чтобы пройти набор записей, вы должны вернуться к первой записи.Поскольку вам больше не нужно использовать .MoveLast
в .Net, вам также не нужно использовать .MoveFirst
.
.MoveNext
В вашем примере VB6.MoveNext
используется для просмотра набора записей и выполнения некоторых действий в каждой строке.Чтобы просмотреть созданную вами таблицу данных, вы можете сделать что-то вроде этого:
Dim my_row as DataRow
For Each my_row in Data19.Rows
If my_row("link1") < ra And my_row("code") <> "00" Then
.. do some actions
End If
Next
Это будет проходить через набор записей аналогичным образом.Следует учитывать, что при работе с DataTable вы работаете с отключенным набором записей.Когда вы доберетесь до частей .Edit
и .Update
вашей процедуры VB6, вам может потребоваться использовать параметризованный запрос для выполнения фактического обновления любых записей.Это будет использовать объект команды и метод .ExecuteNonQuery()
для выполнения оператора обновления SQL.