求助:将字符串插值的INSERT语句转换为VS2012兼容写法
没问题,我来帮你搞定这个转换~
解决VS2012中字符串插值转字符串拼接的问题
你之前拼接时遇到的问题大概率是单引号的嵌套错误,我们先把你的INSERT语句转换成正确的字符串拼接写法:
原来的插值语句:
"INSERT INTO [CustomerInfo] (CustomerName, CustomerEmail, CustomerAddress) " + $"VALUES ('{name}','{email}','{address}')";
转换成VS2012支持的字符串拼接写法:
"INSERT INTO [CustomerInfo] (CustomerName, CustomerEmail, CustomerAddress) " + "VALUES ('" + name + "', '" + email + "', '" + address + "')";
这里要注意:每个变量前后的单引号要正确嵌套——原来插值里的'{name}'对应拼接里的'" + name + "',也就是先写一个双引号包裹的单引号,再拼接变量,再拼接一个双引号包裹的单引号,这样最终生成的SQL里每个值都会被单引号包裹。
重要提醒:别踩SQL注入的坑!
不管是字符串插值还是直接拼接字符串,这种写法都存在严重的SQL注入风险,而且如果用户输入里包含单引号(比如名字是O'Neil),还会直接导致SQL语法错误。
即使在VS2012中,也强烈推荐使用参数化查询,这才是安全且健壮的写法,示例代码如下:
// 假设你用的是SqlConnection using (SqlConnection conn = new SqlConnection("你的数据库连接字符串")) { conn.Open(); string sql = "INSERT INTO [CustomerInfo] (CustomerName, CustomerEmail, CustomerAddress) VALUES (@CustomerName, @CustomerEmail, @CustomerAddress)"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { // 添加参数并赋值 cmd.Parameters.AddWithValue("@CustomerName", name); cmd.Parameters.AddWithValue("@CustomerEmail", email); cmd.Parameters.AddWithValue("@CustomerAddress", address); // 执行插入操作 cmd.ExecuteNonQuery(); } }
参数化查询会自动处理特殊字符(比如单引号),同时彻底避免SQL注入攻击,这比字符串拼接靠谱得多。
内容的提问来源于stack exchange,提问作者SunAwtCanvas
相关产品推荐
相关产品推荐

