Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否从被截断的数据库条目中恢复墨迹数据?_Sql_Sql Server 2005_Fluent Nhibernate_Microsoft Ink - Fatal编程技术网

Sql 是否从被截断的数据库条目中恢复墨迹数据?

Sql 是否从被截断的数据库条目中恢复墨迹数据?,sql,sql-server-2005,fluent-nhibernate,microsoft-ink,Sql,Sql Server 2005,Fluent Nhibernate,Microsoft Ink,编辑:让我把这变成一个简单的SQL问题 我有一个varbinary(max)列,其中包含一个表示MicrosoftInk数据的字节数组。墨水数据由笔划组成,笔划似乎由0x00分隔。比如说 0x0090011D04A4048C0403044810451914320800C03402E9A46242330800E01202D0BA014211ABAAD311E060484E24F6C400A0701096B800A4AC00A06010869093800A2B3C82FCD9F9B5601165CB

编辑:让我把这变成一个简单的SQL问题

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

0x0090011D04A4048C0403044810451914320800C03402E9A46242330800E01202D0BA014211ABAAD311E060484E24F6C400A0701096B800A4AC00A06010869093800A2B3C82FCD9F9B5601165CB61440059412CA8B282F2C61F8C66692772ACD92A22EC2ED2CD2CAB08DCBB1365940A212182FE043BF810FCD6600AB9A451482FC6D64AB337DCA9B2D650

冲程1为0090011D04A4048C0403044810451419143208

冲程2为00C03402E9A4 62423308(我认为两者末尾的0x08是巧合)

等等

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

由于错误,我们有一些MicrosoftInk数据被截断为8000字节,并存储在SQLServer数据库varbinary(max)列中。尝试将此数据加载到新的Ink对象时引发异常“灾难性失败(来自HRESULT的异常:0x8000FFFF(E_意外)”


是否可以恢复任何墨迹数据?我知道它存储为笔划,因此如果有分隔符来标识单个笔划,那么我可以删除尾随的坏数据。

我不熟悉墨迹数据,但是否可以将其作为字节数组读取,并尝试从数组末尾将其转换为墨迹数据在字节数组中按顺序向后遍历,直到ink数据的创建没有引发异常为止。然后,您可以将生成的对象存储在数据库中


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

我尝试了类似的方法——如果墨迹加载失败,我找到了最后一个分隔符并将其截断。不幸的是,墨迹序列化格式()比那更复杂。从格式上看,好像你说的要复杂得多。要做到这一点,你必须基本上截断数据的结尾,直到你遇到最后一个结尾
TAG\u STROKE
。然后你还必须修改所有
TAG\u STROKE
块并将该值设置在Ink对象开头的适当位置。您还必须修改Ink对象开头的
GUID
表,以便从此查找表中删除所有缺少的
TAG\u STROKE
部分。