asp.net 执行1个update 出错 
检查 sql 发现是  update a set  field1='123'23'"' where id=1 
值是123'23'   所以导致sql 不能正确执行 
有没有什么方式让语句正常(sqlserver2005) 测试
insert into a(a) values('Ll4oK''8g')
declare @a varchar(12)
set @a='Ll4oK'
set @[email protected]("'","''")
print @a
insert into a(a) values(@a)
必须把单引号 转双引号?  有没有其他方法解决问题?
(种方法  第一种 通过params的方式  不知道 这样不行不可行  第二种把'这个符号 存进去的时候特换成,或者其他特殊字符  取出来的时候 再反替换)

解决方案 »

  1.   

    可以用参数化更新update a set field1=@field1 where id=@id
      

  2.   


    你没有学过sql?任何一本教你t-sql语法的入门书都应该写过的,如果字符串常量中有两个单引号,而你使用单引号来作为字符串常量的前后缀,那么常量里的单引号就应该写为两个单引号来。如果没有看过正规的sql语法书,现在赶紧上msdn查一下有没有对于字符串常量的规范?!
      

  3.   

    那个不叫做双引号,而是两个单引号。为什么你会对转义这么抵触呢?这值得思考。这往往是老板判断一个开发人员的熟练程度的标志,就是看你是否对基本的规范总是抱着愤青的态度而去绕道而行。在编程中,假设遇到要拼sql字符串的地方,通常必须写var sql="insert into a(a) values ('"+
        theTextBox.Text.Replace("'","''") +"')";
    如果不知道写Replace,我们就说那种开发人员根本不懂sql语法,不按照规范去编程。这跟什么“sql注入”其实没有关系。假设你按照sql语法去编程,这里就不可能有什么“sql注入”的闲言碎语可说。
      

  4.   

    在拼sql字符串时必须处理字符串中(可能)带单引号的情况。例如var sql="insert into a(a) values ('"+ theTextBox.Text.Replace("'","''") +"')";
    或者是必须保证其它类型数据类型正确,例如var sql="insert into a(b) values ("+ int.Parse(theTextBox.Text).ToString() +")";这是基本的数据库编程规范,因为sql基本语法就是这样要求的,你总要保证字符串常量中的单引号转义,总要保证是数字的常量就一定是数字而不是其它。如果你写出的程序一眼就能看出根本不保证sql语法正确,还能让负责验收代码的人(老板或者用户)说什么呢?