如何在T-SQL中为动态字符串变量值正确包裹双引号
解决方案
首先强烈建议优先使用参数化查询,这是最安全的实现方式,既可以彻底避免SQL注入风险,也不需要手动处理字符串转义问题,代码示例如下:
var examNumber = testExamData.examDetails.examNumber; con = new SqlConnection(connectionString); con.Open(); // SQL语句直接用参数占位 cmd = new SqlCommand(@"UPDATE [dbo].[Exams_Data] SET [Exam_Date] = DATEADD(DAY, +90, GETDATE()) WHERE [Status_ID] = 2 AND [Exam_Number] = @ExamNumber", con); // 给参数赋值,自动处理数据类型和转义逻辑 cmd.Parameters.AddWithValue("@ExamNumber", examNumber); dr = cmd.ExecuteReader();
若确实需要手动拼接字符串实现需求
你原来的代码中@""表示逐字字符串格式的空字符串,所以不会输出双引号。如果要输出双引号包裹变量,有两种正确写法:
- 逐字字符串写法(@开头):两个连续双引号代表输出一个双引号,修改为:
"WHERE [Status_ID] = 2 AND [Exam_Number] = " + @"""" + examNumber + @""""
- 普通字符串写法:用反斜杠转义双引号:
"WHERE [Status_ID] = 2 AND [Exam_Number] = \"" + examNumber + "\""
注意:SQL Server默认开启
QUOTED_IDENTIFIER配置,此时双引号会被识别为数据库对象标识符(如表名、列名),不会被识别为字符串值。如果要使用双引号包裹字符串,需要先执行SET QUOTED_IDENTIFIER OFF,更稳妥的通用方案是改用单引号包裹字符串,对应调整拼接写法即可。
内容的提问来源于stack exchange,提问作者StackTrace
相关产品推荐
相关产品推荐

