将FlowDocument保存到SQL Server

5

我需要将WPF FlowDocuments保存到SQL Server中。最好的格式是什么?字符串?二进制大对象(Blob)?在不到5K字的文档中是否重要?

3个回答

6

FlowDocument不可序列化,因此上面的SWeko的答案将无法使用。 您可以使用以下方法将FlowDocument转换为Xaml字符串,然后使用nvarchar(max)保存在数据库中。

    var stringReader = new StringReader(info);
    var xmlTextReader = new XmlTextReader(stringReader);
    return (FlowDocument)XamlReader.Load(xmlTextReader);

and

    var infoString = XamlWriter.Save(info);

2
实际上,SWeko的回答是正确的 - 您可以将FlowDocument序列化为XAML或二进制。您的代码对于XAML是正确的,所以我给你点赞。 - David Veeneman

5
如果您只想将FlowDocument对象存储在数据库中而不进行任何处理,我建议使用二进制序列化,并将结果字节数组存储到varbinary(max)中。这样做速度快且可扩展性好。
然而,如果您已经有了FlowDocuments作为XML文件,则最好将它们倾倒到nvarchar(max)字段中,没有(额外的)序列化/反序列化开销。对于小于8k的值,这种方法很容易扩展,然后在达到大约10MB时表现良好。

2
你可以使用TextRange类来序列化FlowDocument。你甚至可以使用RTF格式。保存:
FlowDocument docToSave; // Lets suppose this var is initialized.
var tr = new TextRange(docToSave.ContentStart,docToSave.ContentEnd);
var dst = new MemoryStream();
tr.Save(dst, DataFormats.Rtf);
dst.Close();

正在加载中:

FlowDocument docToLoad = new FlowDocument();
var tr = new TextRange(docToLoad.ContentStart,docToLoad.ContentEnd);
Stream src; // Lets suppose it is initialized.
tr.Load(src, DataFormats.Rtf);
src.Close();

另请参阅https://www.wpf-tutorial.com/rich-text-controls/how-to-creating-a-rich-text-editor/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接