Могу предложить добавить в список ImportExportDataSql — бесплатная утилита импорта/экспорта данных (подобие bcp, с возможностью добавления названия полей в заголовке) с удобным GUI интерфейсом и расширенными возможностями настроек полей.
Имеется командная строка.
Все настройки хранятся, локально, в XML файле.
Возможность выгрузки данных в SQL-формате, для удобства переноса данных с тестовой среды в продуктовую.
Разрабатывал её для себя, буду рад если она кому-то пригодится в работе. Статья с подробным описанием ImportExportDataSql
Пользуюсь FAQ Net под Windows. Бесплатная, все хранится локально в базе SQLite.
Есть функция всплывающих подсказок, которой пользуюсь как переводчик и для хранения ссылок интернета. Статьи о FAQ Net: статья 1, статья 2, статья о всплывающих подсказках
>> найти разноплановые статьи пример на хабре
ссылка указывает на английскую версию статьи (https://habr.com/en/post/293294/), но переходит на русский. Возможно, что хабр еще не перешел полноценно на английскую версию
А как linq2db считывает 1000 записей, в отдельном потоке?
Если нет, то тогда linq2db будет ждать, пока не прочитается весь файл и при большом объеме файла приложению может не хватить памяти.
Этот код означает чтение всего файла целиком или частями? Если целиком, то будет System.OutOfMemoryException, а если частями то нужно весь код внести в цикл, чтобы записи из файла считывались блоками.
А где же цикл обработки построчно и заливка в БД блоками? Если таким образом заливать несколько Гб разом, то транзакция будет переполнять диск и операция будет очень долгой, либо будет System.OutOfMemoryException.
Это проверено личным опытом.
P.S.: Даже системная утилита bcp пишет блоками по 1000 записей, не задумывались почему? Правда bcp фиксирует изменения одной транзакцией и это происходит долго (забивается диск), а ImportExportDataSql фиксирует изменения сразу после записи блока.
Благодарю за хороший отзыв!
Согласен, что велосипед, но хочется иметь простой инструмент без установки (портативный), чтобы взял и перенес на другой компьютер без проблем, а в какой-то момент доработал под себя.
Я пробовал обрабатывать большие CSV и проблем не возникало. Можно поиграться с количеством записей блоков, чтобы оптимизировать скорость загрузки. Если есть возможность передать мне Ваш CSV файл (хотя бы часть), то я могу попробовать его загрузить в MSSQL и прислать вам готовый настроечный XML-файл, а Вам будет достаточно настроить соединение с БД и нажать кнопку «Выполнить обработку выбранных задач».
Я думал как есть так и обрабатывается, без изменений. Оказалось, что табуляция заменяется на пробел, а переход на новую строку заменяется на пустую строку.
Буду исправлять, спасибо за вопрос!
У меня есть еще одно подобное приложение, которое может конвертировать данные из одной СУБД в другую СУБД (MySQL, MSSQL, Access, Firebird), там есть поддержка ODBC. Вот ссылка, если интересно: yadi.sk/d/JQRvh2BOT7vqtg
Когда-нибудь перенесу тот функционал в ImportExportDataSql
Обязательно будет обработано, может сделаю периодическое сканирование всех каталогов и синхронизацию записей о файлах в БД, а может просто показывать, что это новые файлы и выделять их цветом. Тестирование покажет, как оптимальнее.
Да, файлы идентифицировать по путям (имени файла и ID записи)
Защиты изменений в папке не будет, так как при открытии заметки, список файлов будет подгружаться из папки и любой файл можно будет открыть через приложение, которое указано по-умолчанию для его расширения.
В WinOrganizer есть недостаток — после прикрепления файла и удаления, не сжимается база и файлы прикрепляются в саму БД, что не всегда удобно. Чтобы изменить прикрепленный файл, нужно заново его прикреплять. В FAQ.Net не буду так делать, пусть лучше файлы отдельно от БД будут храниться.
Приложение портабельное, достаточно скопировать в любую папку и распаковать.
P.S.: Под установкой я понимаю, когда запускается установщик (отдельный msi файл) и приложение регистрируется в «Панеле управления»
Имеется командная строка.
Все настройки хранятся, локально, в XML файле.
Возможность выгрузки данных в SQL-формате, для удобства переноса данных с тестовой среды в продуктовую.
Разрабатывал её для себя, буду рад если она кому-то пригодится в работе.
Статья с подробным описанием ImportExportDataSql
Есть функция всплывающих подсказок, которой пользуюсь как переводчик и для хранения ссылок интернета. Статьи о FAQ Net: статья 1, статья 2, статья о всплывающих подсказках
ссылка указывает на английскую версию статьи (https://habr.com/en/post/293294/), но переходит на русский. Возможно, что хабр еще не перешел полноценно на английскую версию
Если нет, то тогда linq2db будет ждать, пока не прочитается весь файл и при большом объеме файла приложению может не хватить памяти.
Этот код означает чтение всего файла целиком или частями? Если целиком, то будет System.OutOfMemoryException, а если частями то нужно весь код внести в цикл, чтобы записи из файла считывались блоками.
Это проверено личным опытом.
P.S.: Даже системная утилита bcp пишет блоками по 1000 записей, не задумывались почему? Правда bcp фиксирует изменения одной транзакцией и это происходит долго (забивается диск), а ImportExportDataSql фиксирует изменения сразу после записи блока.
Согласен, что велосипед, но хочется иметь простой инструмент без установки (портативный), чтобы взял и перенес на другой компьютер без проблем, а в какой-то момент доработал под себя.
Буду исправлять, спасибо за вопрос!
Когда-нибудь перенесу тот функционал в ImportExportDataSql
Защиты изменений в папке не будет, так как при открытии заметки, список файлов будет подгружаться из папки и любой файл можно будет открыть через приложение, которое указано по-умолчанию для его расширения.
P.S.: Под установкой я понимаю, когда запускается установщик (отдельный msi файл) и приложение регистрируется в «Панеле управления»