从截断的数据库条目中恢复墨迹数据?

时间:2011-11-02 18:21:35

标签: sql sql-server-2005 fluent-nhibernate microsoft-ink

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

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

... 0x0090011D04A4048C040304481045141914320800C03402E9A46242330800E01202D0BA014211ABAAD3411E060484E24F6C400A0701096B800A4AC00A060108690943800A2B3C82FCD9F9B56001165CB61440059412CA8B2882FC61F8C66692772AC4D92A2C22E5CD2CAB08DCBB1365940A212182FE043BF810FCCCD6B360AB9A2A451482FC6DF8D664AB337C55DCA9B2D5B650

中风1是0090011D04A4048C0403044810451419143208

中风2是00C03402E9A462423308(我认为两端的0x08是巧合)

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

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

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

1 个答案:

答案 0 :(得分:1)

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

如果您的结果集很大但似乎可能会有效,这似乎可能需要很长时间。