致远CAP4表单联动ERP数据新解:告别无流程表单,实现跨系统数据精准抓取
2026/6/11 12:01:59
字符串中包含单引号直接拼接到 SQL 语句会导致语法错误,因为单引号在 SQL 中被视为字符串边界符。例如:
INSERT INTO table (text) VALUES ('It's a good day') -- 语法错误:单引号提前闭合SQL 标准规定通过双写单引号转义:
It's a good day → It''s a good day代码实现(C#)
string name = "It's a good day"; string safeName = name.Replace("'", "''"); string sql = $"INSERT INTO article (title) VALUES ('{safeName}')";注意
Replace("'", "''")会生成新字符串,需赋值给变量。str.Replace(...)不修改原字符串(因字符串不可变)。通过参数化自动处理特殊字符,同时防止 SQL 注入。
ADO.NET(SQL Server)示例
string sql = "INSERT INTO article (title) VALUES (@title)"; using (SqlCommand cmd = new SqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@title", "It's a good day"); cmd.ExecuteNonQuery(); }OleDb(Access 等)示例
string sql = "INSERT INTO article (title) VALUES (?)"; using (OleDbCommand cmd = new OleDbCommand(sql, connection)) { cmd.Parameters.AddWithValue("?", "It's a good day"); cmd.ExecuteNonQuery(); }| 方法 | 优点 | 缺点 |
|---|---|---|
| 单引号转义 | 简单,兼容所有数据库 | 仅处理单引号,仍有注入风险 |
| 参数化查询 | 安全,自动处理所有特殊字符 | 代码量略多,需依赖数据库驱动 |
Replace("'", "''")快速修复。完整参数化示例
public bool InsertData(string title, string content) { string sql = "INSERT INTO article (title, content) VALUES (@title, @content)"; using (var conn = new SqlConnection(connectionString)) using (var cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@title", title); cmd.Parameters.AddWithValue("@content", content); conn.Open(); return cmd.ExecuteNonQuery() > 0; } }