Удалите информацию заголовка OLE (MS Access / SQL Server) - PullRequest
3 голосов
/ 20 мая 2010

У меня есть приложение на C ++, которое должно поддерживать двоичное содержимое базы данных (изображения и т. Д.).При использовании MS Access или MS SQL Server эти данные помещаются в объект OLE.Как я могу удалить эту информацию заголовка OLE?Обратите внимание, что я не могу просто искать начало определенного тега, поскольку содержимое может быть png, jpg и целой кучей других форматов.Должен ли я использовать что-то вроде COleDataObject?

Ответы [ 3 ]

2 голосов
/ 21 мая 2010

При использовании MS Access 2007 (мне нужно протестировать другие базы данных MS) формат выглядит так:

84 bytes
file name + \0
full path + \0
5 bytes + [2] bytes (the third byte of those five bytes)
temp path + \0
4 bytes
actual data (if not using a link to the file)

Пока что я просто анализирую и удаляю деталь перед фактическими данными, но мне все еще интересно, нет ли способа использовать что-то вроде COleDataSource, чтобы помочь разобрать эту информацию более надежно.

Также обратите внимание, что этот формат применяется только для общего содержимого (начальный тег 0x15 0x1c 0x32). При использовании растровых изображений (начальный тег 0x15 0x1c 0x2f) фиксированное смещение составляет 78 байтов, а при использовании PowerPoint (начальный тег 0x15 0x1c 0x34) - фиксированное смещение 95 байтов.

1 голос
/ 21 мая 2010

Я публикую свой комментарий как ответ:

Не используйте OLE-поля, просто используйте обычные BLOB.

1 голос
/ 21 мая 2010

См. Стивен Лебанс OleToDisk код. Обратите внимание, что код находится в VBA. Также я не знаю, как это будет работать в SQL Server.

...