You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows IoT下C#实现RichEditBox与SQLite3读写方法咨询

实现RichEditBox内容保存/加载至SQLite3的方案(Windows IoT + Sqlite3.PCL)

咱先直接回答你最关心的问题:能不能存入文本字段?

  • 如果可以忽略格式,只存纯文本:完全没问题,直接把RichEditBox的纯文本内容存入SQLite的TEXT字段就行。
  • 如果要保留格式:不行,必须用BLOB字段,因为RichEditBox的带格式内容(比如RTF)本质是带格式标记的结构化数据,文本字段存不下完整的格式信息,会导致格式丢失。

接下来分两种场景给你具体实现步骤:

一、优先保留格式(存入BLOB字段)

RichEditBox的带格式内容默认可以导出为RTF格式,我们可以把RTF字符串转成字节数组,再存入BLOB字段,这样就能完整保留所有格式。

1. 准备SQLite表结构

首先创建包含BLOB字段的表,比如:

CREATE TABLE IF NOT EXISTS FormattedDocument (
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    ContentBlob BLOB NOT NULL
);

2. 保存RichEditBox内容到SQLite

// 获取RichEditBox的RTF格式内容
string rtfContent = await richEditBox.Document.GetTextAsync(Windows.UI.Text.TextGetOptions.FormatRtf);

// 把RTF字符串转成字节数组(用UTF-8编码保证兼容性)
byte[] contentBytes = System.Text.Encoding.UTF8.GetBytes(rtfContent);

// 用Sqlite3.PCL执行插入/更新操作
using (var connection = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "Documents.db")))
{
    connection.Execute("INSERT INTO FormattedDocument (ContentBlob) VALUES (?)", contentBytes);
}

3. 从SQLite加载内容到RichEditBox

// 定义对应的数据模型类
public class FormattedDocumentModel
{
    public int Id { get; set; }
    public byte[] ContentBlob { get; set; }
}

// 加载逻辑
using (var connection = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "Documents.db")))
{
    // 这里示例查询第一条文档,你可以根据需求调整查询条件
    var targetDoc = connection.QueryFirstOrDefault<FormattedDocumentModel>("SELECT * FROM FormattedDocument LIMIT 1");
    if (targetDoc != null && targetDoc.ContentBlob != null)
    {
        // 把字节数组转回RTF字符串
        string rtfContent = System.Text.Encoding.UTF8.GetString(targetDoc.ContentBlob);
        // 加载到RichEditBox并保留格式
        await richEditBox.Document.SetTextAsync(Windows.UI.Text.TextSetOptions.FormatRtf, rtfContent);
    }
}

二、忽略格式(存入TEXT字段)

如果不需要保留格式,操作会更轻量化:

1. 调整表结构

CREATE TABLE IF NOT EXISTS PlainDocument (
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    ContentText TEXT NOT NULL
);

2. 保存纯文本

string plainText = await richEditBox.Document.GetTextAsync(Windows.UI.Text.TextGetOptions.None);

using (var connection = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "Documents.db")))
{
    connection.Execute("INSERT INTO PlainDocument (ContentText) VALUES (?)", plainText);
}

3. 加载纯文本

// 对应的数据模型类
public class PlainDocumentModel
{
    public int Id { get; set; }
    public string ContentText { get; set; }
}

// 加载逻辑
using (var connection = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "Documents.db")))
{
    var targetDoc = connection.QueryFirstOrDefault<PlainDocumentModel>("SELECT * FROM PlainDocument LIMIT 1");
    if (targetDoc != null)
    {
        await richEditBox.Document.SetTextAsync(Windows.UI.Text.TextSetOptions.None, targetDoc.ContentText);
    }
}

注意事项(Windows IoT环境)

  • 数据库文件路径:一定要用应用的本地存储路径(ApplicationData.Current.LocalFolder.Path),避免权限不足的问题,Windows IoT对文件系统访问权限限制比较严格。
  • Sqlite3.PCL版本:确保你安装的NuGet包是适配UWP/Windows IoT的版本,避免出现兼容性异常。

内容的提问来源于stack exchange,提问作者Fables Alive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:26:30