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

SQL Server更新含单引号字符串及Execute方法选择问题

含单引号字符串插入SQL Server的问题与解决方案

问题场景

向SQL Server表中插入或更新含单引号的字符串(如"I like 'bats'"、"He is 'cool'")时,直接用字符串拼接SQL会触发语法错误,提示"incorrect syntax near {bats OR cool}"。原代码通过string.Format拼接SQL语句,导致单引号破坏了SQL语法结构:

string a = "I am 'coding'";
string UpdateTable = string.Format(@"UPDATE TestTable
                                     SET Column = '{0}'
                                     WHERE Rows = 'Monday'", a);

SqlCommand command = new SqlCommand(UpdateTable, connection);
command.ExecuteReader();

程序化解决方案:参数化查询

参数化查询是解决这类问题的最优方案,它会自动处理字符串中的特殊字符(包括单引号),同时还能有效防范SQL注入攻击,无需手动替换单引号。改进后的代码如下:

string a = "I am 'coding'";
string UpdateTable = @"UPDATE TestTable
                       SET Column = @a
                       WHERE Rows = 'Monday'";

SqlCommand command = new SqlCommand(UpdateTable, connection);
command.Parameters.AddWithValue("@a", a);
command.ExecuteNonQuery();

ExecuteNonQuery与ExecuteReader的选择

在这个UPDATE场景下,应该用ExecuteNonQuery,原因如下:

  • ExecuteNonQuery专门用于执行不返回结果集的SQL语句(如UPDATE、INSERT、DELETE),它会返回受影响的行数,完全匹配UPDATE操作的需求。
  • ExecuteReader是为执行返回结果集的SELECT语句设计的,它会创建SqlDataReader对象来读取查询结果。用它执行UPDATE操作不仅没有意义,还会额外占用资源,因为UPDATE操作本身不会返回结果集(除非使用OUTPUT子句,但你的场景中没有)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:48:50