Рейтинг:
2
Atlapure Ambrish
Можете ли вы попробовать использовать "считыватель данных" вместо адаптера и посмотреть, будет ли выборка данных успешной?
если "считыватель данных" работает для извлечения данных, то вы можете преобразовать/сохранить результирующий набор, возвращенный в datatable или сложный тип, необходимый для дальнейшей обработки (т. е. преобразования в JSON).
Вы также можете использовать TimeSpan для проверки разницы во времени, необходимый для выборки записей, используя адаптер и Reader. Е. Г.: делать эту работу за 50к, 150К и 500К записей. Я уверен, что считыватель данных будет работать быстрее.
Рейтинг:
1
OriginalGriff
Откуда нам знать?
Мы понятия не имеем, что ваш DataTableToJSONWithStringBuilder
метод делает-кроме широкого контура, который дает название метода, - ни какого-либо представления о том, какая именно линия вызывает проблему.
Так что все будет зависеть от вас.
Поместите точку останова в первую строку этого кода и запустите приложение через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.
Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!
Цитата:
Привет,
Я тоже думаю о том же. Но я не специалист по sql. Как я могу получать его партиями, например, сначала 50 тысяч, а потом так далее..
Зависит от вашей версии SQL server.
Старый способ-использовать ORDER BY с номером строки:
SELECT MyColumns
FROM (SELECT MyClolumns, ROW_NUMBER() OVER (ORDER BY UniqueKeyColumn) AS RowNum FROM MyTable) s
WHERE s.RowNum BETWEEN @StartRow AND @EndRow
Это работает начиная с SQL 2005.
SQL 2012 представил OFFSET-FETCH:
SELECT MyColumns FROM MyTable ORDER BY UniqueKeyColumn OFFSET @STARTROW ROWS FETCH NEXT @ROWSCOUNT ROWS ONLY
Telstra
Привет,
Большое спасибо за ваш ответ.
Способ DataTableToJSONWithStringBuilder-это просто метод, который преобразовывает объект DataTable записи в формате JSON. Этот метод не является проблемой. Кроме того, когда я делал отладку, я получил ошибку на da.Fill(dt); строка с исключением памяти.
Это та область, где я не могу обработать 2M записей и не могу сохранить их в datatable из-за проблемы с памятью datatable. Как только я получил запись в datatable
Метод DataTableToJSONWithStringBuilder () преобразует его в Json.
Не могли бы вы помочь, как устранить эту ошибку?
Спасибо,
Нилеш
CodeWraith
Как насчет того, чтобы не пытаться делать все сразу? Загрузка и обработка меньшего количества строк за один раз и выполнение этого в цикле до тех пор, пока все строки не будут обработаны, может очень помочь.
OriginalGriff
Если ошибка возникает, когда вы пытаетесь извлечь все строки одновременно - а это именно то, что вы говорите, - тогда есть только одно решение: не извлекайте все строки одновременно...
Telstra
Привет,
Я тоже думаю о том же. Но я не специалист по sql. Как я могу получать его партиями, например, сначала 50 тысяч, а потом так далее..
Заранее спасибо..
OriginalGriff
Ответ обновлен
OriginalGriff
Кстати: вы понимаете, что JSON не является эффективным методом хранения, потому что он основан на тексте? И что 2 000 000 строк (при условии, что эти строки имеют какой-либо значительный размер) будут генерировать очень, очень большой JSON-файл?