C# EMLOG 文章数据导出工具:从数据库连接到JSON序列化的实操教程

大家好,欢迎来到零点博客。最近在维护我的 EMLOG 站点时,发现后台没有直接“导出文章”的功能,导出博客搬家是个头疼事儿。为了省事,我决定利用平时积累的 C# 和 MySQL 知识,自己动手写一个小工具。

这篇分享不仅仅是代码展示,更是一份详细的实操教程。我会把开发中遇到的坑,比如 SQL 注入防护、JSON 解析技巧以及正则表达式清洗脏数据的细节都讲透。


一、 项目背景与技术栈

我们的目标是读取 EMLOG 数据库中的 `blog` 和 `attachment` 表,经过处理,最终生成一个结构清晰的 JSON 文件,方便后续迁移或做二次开发。

  • 后端语言: C# (.NET Core Console App)
  • 数据库: MySQL
  • 数据处理: 正则表达式
  • 输出格式: JSON / XML

二、 核心步骤:SQL 连接与预处理(避坑指南)

在操作数据库时,很多初学者喜欢直接拼接字符串。我以前也踩过坑,后来学会了使用 SQL 预处理语句。这不仅性能更好,最重要的是能防止 SQL 注入 攻击。

代码实现

using System.Data;
using MySql.Data.MySqlClient;

// 数据库连接字符串
string connStr = "Server=localhost;Database=emlog;User=root;Password=123456;CharSet=utf8mb4;";

using (MySqlConnection conn = new MySqlConnection(connStr))
{
    conn.Open();

    // 使用预处理语句,防止 SQL 注入
    string sql = "SELECT title, content, date FROM blog WHERE uid = @uid ORDER BY date DESC LIMIT 10";

    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    {
        // 绑定参数,这里 uid 应该通过逻辑传入,或者默认查全部
        cmd.Parameters.AddWithValue("@uid", 1); 

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 读取数据逻辑...
            }
        }
    }
}

博主复盘: 大家看,用 `Parameters.AddWithValue` 替代了直接写 `$uid`,这就是区分初级和中级开发的关键点。在处理 Web 接口开发时,这一步是底线。

三、 数据清洗:利用正则表达式

从数据库读出来的 HTML 内容往往包含大量的标签。为了在 JSON 中保持整洁,我们需要正则表达式(Regex)来“清洗”这些内容。比如,我们只想提取纯文本,或者提取文章中的图片链接。

using System.Text.RegularExpressions;

string htmlContent = reader["content"].ToString();

// 提取正文中的所有图片链接
MatchCollection matches = Regex.Matches(htmlContent, "<img[^>]+src="([^"]+)"", RegexOptions.IgnoreCase);

foreach (Match match in matches)
{
    string imgUrl = match.Groups[1].Value;
    Console.WriteLine(imgUrl);
}

四、 最终输出:JSON 数据生成与接口模拟

数据清洗完毕后,我们需要将其封装成 JSON 格式。C# 自带的 `Newtonsoft.Json` 库非常强大,同时也支持简单的 `JObject` 直接构建。

using Newtonsoft.Json;
using System.Collections.Generic;

// 封装数据模型
List<Article> articles = new List<Article>();

// 假设上面循环读数据时把对象 push 进来了
string jsonOutput = JsonConvert.SerializeObject(articles, Formatting.Indented);

// 写入文件
File.WriteAllText("blog_backup.json", jsonOutput);
Console.WriteLine("导出成功!");

五、 总结

通过这个零点博客的实战案例,我们完成了从数据库查询、SQL 注入防护、正则清洗到 JSON 序列化的完整流程。如果你正在开发类似的小工具或者爬虫开发项目,希望这篇 实操教程 能给你提供一些思路。

切记,安全永远是第一位的,写爬虫或工具时,严格遵守数据接口的访问规则,不要搞硬编码的用户名密码泄露。