黑马程序员技术交流社区

标题: Sql语句中,变量含有的特殊字符的处理 [打印本页]

作者: 李冠彬    时间: 2012-12-27 00:15
标题: Sql语句中,变量含有的特殊字符的处理
本帖最后由 李冠彬 于 2013-1-3 21:22 编辑

代码:
        "insert into select_music (music_name) values ('"+TextBox1.Text+"')"
//这里参数为变量值,即textbox中的内容。现在textbox中内容为:Jem - It's Amazing.mp3 ;

计算机经过赋值、字符串拼接后,执行语句实际为:
         "insert into select_music (music_name) values ('Jem - It's Amazing.mp3 ')"        

好了,问题出现了。歌名中的It‘s,含有一个单引号。报错了。
请问这怎么解决?不要怀疑歌曲名字。名字没问题,也不能改,因为很多歌内有单引号。
求高手指点。

作者: 赵小江    时间: 2012-12-27 00:17
用双单引号试试,就是写两个单引号.
作者: 李冠彬    时间: 2012-12-27 15:01
赵小江 发表于 2012-12-27 00:17
用双单引号试试,就是写两个单引号.

你说的是直接把单引号改成双引号吗?    好几种都试了,不行。
作者: 李冠彬    时间: 2012-12-27 15:03
自己顶一下,求高手……
作者: 赵小江    时间: 2012-12-27 19:55
李冠彬 发表于 2012-12-27 15:01
你说的是直接把单引号改成双引号吗?    好几种都试了,不行。

是用两个单引号'' ,就像两个加号++
作者: 李冠彬    时间: 2012-12-27 20:11
赵小江 发表于 2012-12-27 19:55
是用两个单引号'' ,就像两个加号++

你好,感谢你的支持。可是不行啊,你可以试试,我没试出来。只要是单引号,就会跟歌曲里的单引号组对。就出错了。
作者: 王继光    时间: 2012-12-27 20:19
不要使用 拼接字符串的方法来使用 sql语句,特别是这种可以在 文本框中 输入 查询的值得时候 用 拼字符串的方法会出现  注入漏洞攻击。 正确的方法是 使用 参数化查询。

"insert into select_music (music_name) values ('"+TextBox1.Text+"')"
这个可以改成这样
  Insert into Select_music(music_name) values(@music_name);
   cmd.Parameters.Add(new SqlParameter("@music_name",TextBox1.Text));
作者: 李冠彬    时间: 2012-12-27 20:27
本帖最后由 李冠彬 于 2012-12-27 20:29 编辑
王继光 发表于 2012-12-27 20:19
不要使用 拼接字符串的方法来使用 sql语句,特别是这种可以在 文本框中 输入 查询的值得时候 用 拼字符串的 ...

嗯,谢谢,你说的这个我真不了解,值得学习。
其实我那个是为了方便大家理解,没有TextBox1,数据是从数据库取值,赋值给DataGridView,歌名显示,地址是隐藏字段。没有用户输入的语句。倒是有个地方可以由用户输入,就是查询歌曲时。
另外那个单引号的问题有想法吗?

作者: 赵小江    时间: 2012-12-27 20:28
李冠彬 发表于 2012-12-27 20:11
你好,感谢你的支持。可是不行啊,你可以试试,我没试出来。只要是单引号,就会跟歌曲里的单引号组对。就 ...

values ('Jem - It''s Amazing.mp3 ') 我这样写成功了.
作者: 李冠彬    时间: 2012-12-27 20:31
本帖最后由 李冠彬 于 2012-12-27 21:17 编辑
赵小江 发表于 2012-12-27 20:28
values ('Jem - It''s Amazing.mp3 ') 我这样写成功了.

你怎么操控的变量呢?那个地方不能改,(不能把电脑上存的歌曲名字改了)。不是自己写的东西。
如果判断一下,indexOf,去掉单引号,也可以。违背了点原则。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2