4

我需要将 WPF FlowDocuments 保存到 SQL Server。这样做的最佳格式是什么?细绳?斑点?在少于 5K 字左右的文档中是否重要?

4

3 回答 3

6

FlowDocument 不可序列化,因此上述 SWeko 的回答将不起作用。您可以使用以下方法从 Xaml 字符串中获取 FlowDocument,然后可以使用 nvarchar(max) 将其保存在数据库中。

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

    var infoString = XamlWriter.Save(info);
于 2010-03-25T09:14:58.880 回答
5

如果您只想将 FlowDocument 对象存储在数据库中,而不进行任何处理,我建议使用二进制序列化,并将生成的字节数组存储到 varbinary(max) 中。这速度很快并且可以很好地扩展。

但是,如果您已经将 FlowDocuments 作为 XML 文件,那么将它们转储到 nvarchar(max) 字段中会更容易,而无需(添加)序列化/反序列化开销。对于 8k 以下的值,这可以微不足道地扩展,然后执行还不错,直到达到 10MB 左右。

于 2010-03-15T15:43:47.693 回答
1

您可以使用 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/

于 2020-07-10T08:14:20.710 回答