站内实战 | C# 后端 + MySQL:手把手开发 SQL 在线格式化工具

最近在折腾零点博客的 Emlog 二次开发,为了方便处理后台庞大的 SQL 数据,我在想,如果有个在线工具能直接把乱七八糟的 SQL 拼接成规范格式,岂不是美滋滋?于是,便有了今天的主题——在线工具开发。

这不仅仅是个练手项目,更是对 C# 后端、MySQL 交互、正则处理以及接口安全的一次全面复盘。很多人问我,前端写 HTML/CSS JS 就行,后端 PHP/C# 怎么选?作为长期混迹于 Emlog 和 C# 技术栈的开发者,我认为在处理复杂逻辑和正则解析时,C# 的表现力确实更强。

一、 需求拆解与技术选型

我们的目标是做一个轻量级的SQL 在线格式化工具。

  • 后端: ASP.NET Core (C#)。利用其强大的 LINQ 和正则库。
  • 数据库: MySQL。用于存储配置或备份数据。
  • 前端: 原生 HTML/CSS/JS。无框架依赖,方便部署到 Emlog 主题或独立页面。

二、 核心开发步骤

1. 接口开发与 JSON 数据交互

前端负责展示,C# 负责逻辑。我们需要编写一个标准的 Web API 接口。这里涉及到JSON/XML 数据解析,不过在我们的场景里,接收前端 POST 请求中的纯文本 SQL,处理后再返回 JSON 结果是最稳妥的。

在 C# 中,通过 `[FromBody]` 接收字符串,无需手动解析 XML,效率极高。

2. 正则表达式大显身手

SQL 格式化的核心在于正则。这里我踩了个坑:直接用简单的 `\s+` 替换空格会导致关键字粘连。我最终写了一组复杂的正则表达式,专门用于匹配 `SELECT`, `FROM`, `WHERE` 等关键字前后,插入换行符。

代码片段:

string formatSql = Regex.Replace(inputSql, @"\s+", " "); // 预处理多余空格
formatSql = Regex.Replace(formatSql, @"(\b(SELECT|FROM|WHERE|AND|OR)\b)", "\n$1", RegexOptions.IgnoreCase);

3. 数据库存储与爬虫辅助

有些用户希望把常用 SQL 存下来。虽然这个工具不需要实时连库查询,但为了演示MySQL 数据库与 SQL 语句操作,我在后台加了个小功能,用 C# 写了个微型爬虫去抓取公开的 SQL 文档,存入 MySQL 的 `blog_tools` 表中。

这里必须强调:爬虫开发不仅仅是写代码,还要考虑反爬策略。但作为工具,我们只需要建立索引即可。

4. SQL 注入防护与预处理

这是后端开发最容易被忽视的地方。虽然这个工具是纯展示性质的(不直接执行 SQL),但如果将来接入“执行 SQL”的功能,必须使用预处理语句。

很多人习惯字符串拼接 SQL,这是大忌。C# 的 `SqlParameter` 就是神器,它能自动转义特殊字符,杜绝 SQL 注入防护 风险。

string sql = "SELECT * FROM users WHERE username = @user";
using (var cmd = new MySqlCommand(sql, connection)) {
    cmd.Parameters.AddWithValue("@user", inputUser);
    // 执行查询...
}

三、 前端落地与避坑指南

后端逻辑跑通后,就是前端的 HTML/CSS/JS 实战了。我推荐使用 Flexbox 布局,保证在不同设备上都能自适应。

避坑点:

  • JS 获取 textarea 内容时,注意 `trim()`,防止用户只敲空格提交。
  • CSS 高度要设为 `min-height`,防止内容少时太丑。
  • 字符编码统一为 UTF-8,防止中文乱码。

四、 总结与源码放送

通过这次在线工具开发,我深刻体会到,熟练掌握正则和数据库交互的重要性。这个工具不仅省去了我手动写 SQL 的麻烦,代码结构也很清晰,方便以后扩展。

源码我已经整合进了零点博客的 GitHub 仓库,感兴趣的童鞋可以拿来二次开发。如果你在开发过程中遇到 C# 接口报错或者 MySQL 连接问题,欢迎在评论区留言,咱们一起探讨!


标签:C# / 在线工具开发 / MySQL / 正则表达式 / SQL注入防护