2

编辑:让我把它变成一个直接的 SQL 问题......

我有一个 varbinary(max) 列,其中包含一个表示 Microsoft Ink 数据的字节数组。墨迹数据由笔画组成,笔画似乎由 0x00 分隔。例如

0x0090011D04A4048C040304481045141914320800C03402E9A46242330800E01202D0BA014211ABAAD3411E060484E24F6C400A0701096B800A4AC00A060108690943800A2B3C82FCD9F9B56001165CB61440059412CA8B2882FC61F8C66692772AC4D92A2C22E5CD2CAB08DCBB1365940A212182FE043BF810FCCCD6B360AB9A2A451482FC6DF8D664AB337C55DCA9B2D5B650...

行程 1 为 0090011D04A4048C0403044810451419143208

笔画2是00C03402E9A462423308(我认为两者末尾的0x08是巧合)

等等

最后一个 Stroke 已损坏,因为数据在插入时被截断。如何从数据中仅删除最后一个 Stroke?如果可能,我想在 SQL 更新中执行此操作。

由于Fluent NHibernate 映射 SNAFU,我们有一些 Microsoft Ink 数据被截断为 8000 字节并存储在 SQL Server 数据库 varbinary(max) 列中。尝试将此数据加载到新的 Ink 对象中会引发异常“灾难性故障(来自 HRESULT 的异常:0x8000FFFF (E_UNEXPECTED)”。

是否可以恢复任何 Ink 数据?我知道它被存储为笔画,所以如果有一个分隔符来识别单个笔画,那么我可以删除尾随的坏数据。

4

1 回答 1

1

我不熟悉 Ink 数据,但是否可以将其作为字节数组读取并尝试将其转换为从数组末尾开始在字节数组中按顺序向后工作的墨迹数据,直到创建墨迹数据不不要抛出异常。然后,您可以将此结果对象存储在数据库中。

如果您的结果集很大,这似乎可能需要很长时间,但它似乎可以工作。

于 2011-11-03T01:31:20.123 回答