Какого поставщика данных я могу использовать для обновления .dbf файла от C#?
Я судил несколько различных .dbf поставщиков для создания DataSource, но я получаю сообщение как это: "Сообщение об ошибке: ошибка HYC00 Microsoft ODBC dBase Дополнительная опция Драйвера, не реализованная".
Или когда я генерировал набор данных и dataadapter с функцией обновления, я добрался: "Обновление требует допустимого UpdateCommand когда переданный набор DataRow с измененными строками".
Если кто-либо знает некоторый способ работать над .dbf от C# с большим количеством обновлений, помогите. Когда я пытаюсь обновить строки один за другим, это слишком медленно, потому что поставщик потеряет слишком много времени при поиске большого .dbf файла. Возможно, существует способ автоматически создать индекс и что источник данных знает для использования его?
Иначе должен загрузить все во что-то как набор данных и обновление после того, как все изменения сделаны, но часть обновления не работает на данный момент.
Справка!
Обычно драйвер FoxPro работает с файлами .DBF. Формат файла достаточно похож, чтобы его можно было читать. Писать немного сложнее. К сожалению, поскольку DBASE - такая старая технология, .NET плохо с ней справляется, так что вы в значительной степени застряли на своем медленном варианте. Поверьте, я чувствую вашу боль, потому что мне приходится регулярно работать с ними для POS-системы, которую мы поддерживаем.
http://www.aspcode.net/Reading-DBF-files-in-C.aspx
Подключение .NET к файлу dBase .dbf
Как читать / писать файлы dBase III с помощью C # /. NET ODBC или OLE?
и, наконец, мой любимый источник строк подключения:
Обычный OleDbConnection
довольно хорошо обрабатывает DBF, если вы придерживаетесь очень простых операций SQL.
Здесь, где я работаю, мы создаем и поддерживаем приложения, которые взаимодействуют с DBF, используя исключительно классы OleDb. Однако мы не используем адаптеры или источники данных - все делается «напрямую» через OleDbCommands, OleDbDataReaders и так далее.
Возможно, адаптеры данных полагаются на функции, которые могут отсутствовать при взаимодействии с базовыми или устаревшими источниками данных, такими как xBase. Вы пробовали использовать UPDATE
OleDbCommand?
Из вашего комментария о ~1GB базе данных, я тоже работаю с VFP базами данных (.dbf) форматов файлов, и SQL-Updates работает без проблем через создание / выполнение OleDbCommand, и может работать с любыми родными командами VFP OleDbProvider.
Для удаления некоторых символов я обычно использую функцию CHRTRAN() (то есть, если вы используете Visual Foxpro Ole DB Provider), где вы можете буквально удалить многие символы (такие как invalid), например...
Update YourTable
set SomeField = chrtran( SomeField, "!@#$%^*(", "" )
пройдет по ВСЕМ записям и вычеркнет из поля (первый параметр) любой символ (2-й параметр) и заменит его на соответствующий символ, найденный в 3-м параметре... в данном случае нет значения, просто пустая строка, поэтому символы будут вычеркнуты. Само по себе это довольно быстро, и вам не нужно постоянно сканировать все записи, которые загружаются, проверяются и затем отталкиваются.
Опять же, не знаю, с какой родной файловой системой .DBF вы работаете, но VFP очень быстро справляется с такими манипуляциями.