【C#实战】手撸EMLOG数据同步工具:从底层SQL注入防护到JSON解析全解析

大家好,我是零点博客的博主。在折腾 EMLOG 这套轻量级 CMS 的过程中,我发现单纯的 PHP 后端在处理海量数据清洗或跨平台接口对接时,往往显得有些力不从心。于是,我决定用 C# 这种强类型语言来充当我们的“数据中间人”。

今天这篇干货,将带你从零开始,结合 EMLOG 的数据库结构,实战开发一个自动抓取外部数据并同步入库的 C# 工具。重点会讲解 C# MySQL连接、SQL注入防护(预处理语句) 以及 JSON解析 的底层逻辑,全是硬货,拒绝套话。

一、 准备工作:C# 如何连接 EMLOG 数据库

EMLOG 默认使用 MySQL 存储。在 C# 中,我们主要依赖 MySql.Data 包。

在连接之前,你需要知道 EMLOG 的表结构。比如 emlog_data 表存储文章内容,emlog_option 存储全局配置。首先,我们构建一个连接字符串:

string connStr = "Server=localhost;Database=emlog;User=root;Password=yourpassword;CharSet=utf8mb4;";
using (MySqlConnection conn = new MySqlConnection(connStr))
{
    conn.Open();
    // 你的代码逻辑
}

二、 核心安全:为什么 C# 必须用预处理语句防 SQL 注入?

很多初学者喜欢用字符串拼接,比如 $"INSERT INTO ... VALUES ('{name}')"。这简直是给自己埋雷。一旦用户输入了恶意脚本,你的博客就可能被挂马。

在 C# 开发中,使用 SqlCommand 配合参数化查询是最佳实践。我们可以把用户输入当作“数据”而不是“代码”来处理。下面是一个防止 SQL 注入的实战案例:

string sql = "INSERT INTO emlog_article (title, content) VALUES (@Title, @Content);";
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
    // 关键点:使用参数化查询
    cmd.Parameters.AddWithValue("@Title", userInputTitle);
    cmd.Parameters.AddWithValue("@Content", userInputContent);

    cmd.ExecuteNonQuery();
}

这段代码利用了 MySQL Driver 的预处理机制,自动转义特殊字符,从根本上杜绝了注入风险。

三、 进阶实战:JSON 数据解析与爬虫开发

假设我们不想手动录入文章,而是通过爬虫抓取其他聚合网站的 RSS 或 JSON 数据,自动同步到零点博客。这时候 JSON解析 就成了核心。

在 .NET Core/6+ 环境下,我们通常使用 System.Text.Json。如果你在 WinForms 开发中,老项目可能会用到 Newtonsoft.Json。这里演示一个简易的爬虫逻辑,抓取页面标题并存入数据库:

string htmlContent = GetWebContent("https://target-site.com/feed.json");
var jsonDoc = JsonDocument.Parse(htmlContent);
var root = jsonDoc.RootElement;

foreach (var item in root.EnumerateArray())
{
    string title = item.GetProperty("title").GetString();
    string content = item.GetProperty("description").GetString();

    // 这里调用上面的插入方法
    InsertToEmlog(title, content); 
}

四、 避坑指南:正则表达式与乱码处理

爬虫开发中,HTML 结构往往很混乱。直接存入 MySQL 会导致数据库乱码。处理方式通常是:

  1. 抓取时指定 UTF-8 编码。
  2. 使用 正则表达式 提取纯文本内容,去除 HTML 标签。
// 常用正则:去除所有HTML标签
string noHtmlRegex = @"<[^>]+>";
string plainText = Regex.Replace(rawHtml, noHtmlRegex, string.Empty).Trim();

我在开发初期就栽在这里,后来发现通过 Encoding.UTF8.GetString(bytes) 转换,再配合正则清洗,效果非常稳定。

五、 总结

通过这次结合 C# 与 EMLOG 的开发,我们不仅解决了 PHP 在数据处理上的痛点,还通过预处理语句学到了安全的编程规范。无论你是做 接口开发 还是 爬虫开发,预处理语句 和 JSON解析 都是必须要掌握的基石。

源码已经整理好上传到了零点博客的资源区,大家可以去下载实操。如果有任何问题,欢迎在评论区留言复盘!