Фундаментально, Идентификаторы на самом деле не имеют никакого отношения к грести рассчитывать только случайно. Существует перегрузка для метода DataAdapter.Fill()
, который позволяет указать диапазон загружаемых строк.. Я дважды проверял, чтобы убедиться, что он работает с текстовым драйвером OleDB.
Private OLECSVConnstr = ...your text driver connection string
Private firstRow As Int32 = 0
Private rowCount As Int32 = 1000
...
Private Function ImportRows(csvFile As String) As Int32
Dim SQL = String.Format("SELECT * FROM {0}", csvFile)
Dim rows As Int32
Using dbcon As New OleDbConnection(OLECSVConnstr)
Using cmd As New OleDbCommand(SQL, dbcon)
' DataTable is IDiposable, so dont just
' (re)create a new one each time
If dtSample Is Nothing Then
dtSample = New DataTable
Else
dtSample.Rows.Clear()
End If
Using da As New OleDbDataAdapter(cmd)
dbcon.Open()
rows = da.Fill(firstRow, rowCount, dtSample)
End Using
' increment firstrow for next time
firstRow += rowCount
End Using
End Using
dgv2.DataSource = dtSample
Return rows
End Function
Редактировать: С DataTable
реализует IDisposable
создавая новый для каждого «пакета»/набор строк может привести к утечке. Вышеприведенные проверки и при необходимости создают новый, а в противном случае очищают строки. Кроме того, вы можете создать DataAdapter только один раз.
DataAdapter.Fill(int first, int count, DataTable dt)
позволяет рассказать адаптеру первую строку для загрузки и сколько. Метод ImportRows
выше возвращает количество загруженных строк, поэтому, когда он возвращает меньше запрошенного числа, это означает, что больше нет строк.
С таким большим файлом, я хотел бы использовать Schema.INI
с OleDB Text Driver, так что вы можете указать типы данных, используемые для каждой строки. Без него текстовый драйвер определяет типы данных (догадки) из данных в первых нескольких строках.
Я должен упомянуть, что CSVHelper
также может использоваться для загрузки строк партиями. Он считывает CSV-строку за раз, когда вы вызываете Read()
, поэтому вам нужно всего лишь поддерживать ссылку на считыватель CSV и вызывать ее в цикле для получения N строк за раз.
DBDataAdapter.Fill on MSDN
Как может быть больше, чем Идентификаторы строк? – Plutonix
, если я запустил код выше, он читается только до 60.000 идентификаторов, но не до последнего идентификатора, который равен 220 000, а всего 70 000 строк, некоторые идентификаторы являются избыточными и в этом порядке, например. 37, 37, 46, 126 – Sparkm4n
В основном строки <> Id. Попытка ограничить количество строк, импортированных идентификатором, заставит его прочитать весь файл, чтобы посмотреть на идентификаторы. Мне нужно проверить, что что-то будет работать с текстовым драйвером – Plutonix