Доступ к BLOB-полям Microsoft Access 2003 и 2007 из .Net - PullRequest
1 голос
/ 24 мая 2010

Мне нужно иметь возможность извлекать большие двоичные объекты как из Access 2003, так и из Access 2007. Access 2003 хранит большие двоичные объекты как «объекты OLE», а Access 2007 предоставляет вам другую опцию «Вложение». Основное отличие состоит в том, что в одну строку можно добавить несколько вложений, тогда как для каждого типа данных «OLE Object» может быть только один BLOB.

Я должен быть в состоянии сделать это без использования взаимодействия, поскольку я не могу принудительно установить зависимость установки Office. Это оставляет меня с DAO или ADO. Поэтому я написал код для использования обеих технологий для извлечения больших двоичных объектов из тестовой базы данных с множеством встроенных типов файлов.

Проблема, с которой я столкнулся, заключается в том, что, похоже, Access оборачивает встроенные файлы в метаданные определенного типа. В результате получается, что извлеченный файл больше не является тем же самым и не может быть открыт связанным приложением, поскольку он «поврежден». Access хранит такие вещи, как оригинальное имя файла и т. Д. В этих метаданных. Мне нужно иметь возможность вырезать эти метаданные из файлов, чтобы файл имел исходное состояние.

Есть ли какая-то темная магия вуду, которая может это сделать? Существует очень мало документации по этому вопросу. Любая помощь будет оценена.

Заранее спасибо.

1 Ответ

0 голосов
/ 09 февраля 2011

Это происходит потому, что OLE-объекты хранятся как «изображения» в Access. Это приводит к проблемам с производительностью, а также к таким проблемам, как ваша. Чтобы справиться с этими ограничениями, Microsoft ввела поля Access в Access 2007/2010, которым не нужны OLE-серверы для запуска контента. MS-Access автоматически управляет вложениями, которые должны содержать более одного файла на запись. Возможно, вам следует использовать вложения или изменить базу данных для SQL Server, MY-SQL, Firebird.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...