免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3066 | 回复: 1
打印 上一主题 下一主题

关于SQL语句中的引号问题(VB&VBScript) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-01-16 16:23 |只看该作者 |倒序浏览
最近在写 SQL语句时因为引号引起的问题,所以查了点资料..综合了一下下~--~
* 举例时以 VB6.0为依据;
* VB与VBScript不同的地方将分别说明;
* 数据库连结用 ADO。

要点:
在 VB&VBScript中,标记字符串变量内容用双引号,用两个连续的双引号表示字符串中
的双引号;
在 SQL语法中,标记字符串变量内容用单引号,用两个连续的单引号表示字符串中的单
引号。

在 VB&VBScript中访问数据库的时候最常用的是以下两种语句:
1、选择查询(select),返回结果集;
2、动作查询(update、insert、delete等),无结果集。

无论哪一种语句,经常需要根据用户的输入来构造符合 SQL语法的字符串,提交给连结
对象或结果集对象来执行(open或 execute方法),在 VB&VBScript中,标记字符串变量内
容用双引号,如
strSql="select * from UserList"
在 SQL语法中,标记字符串变量内容用单引号,如:
select * from UserList where UserName='MouseFly'

如果程序的窗口(浏览器的页面)上有两个文本框用于让用户输入登记注册的用户信息
或者是查询条件,假设用户输入了“MouseFly”、“1234”,需要登记到数据库的一个用户
注册表 UserList中,则SQL字符串应如下组织:
strSql="insert into UserList (UserName,Password) values (" & _
"'" & me.txtUserName.text & "'," & _
"'" & me.txtPassword.text & "')"
生成的结果为:
insert into UserList (UserName,Password) values ('MouseFly','1234')
但是如果用户输入中包含了单引号,如“12'3”,按照上面的组织方法则为:
insert into UserList (UserName,Password) values ('MouseFly','12'3')
这时再执行的时候,会提示 SQL语法错误,原因就在于“12'3”中的单引号,由于在 SQL语
法中,标记字符串变量内容用单引号,因此“'12'3'”无法被正确识别,所以在组织字符串
的时候要考虑将用户输入的单引号替换成两个连续的单引号,此时要用到Replace函数:
strSql="insert into UserList (UserName,Password) values (" & _
"'" & replace(me.txtUserName.text,"'","''" & "'," & _
"'" & replace(me.txtPassword.text,"'","''" & "')"
结果为:
insert into UserList (UserName,Password) values ('MouseFly','12''3')
如果使用的是VBScript则me.txtUserName.text和me.txtPassword.text要换成相应的浏览器
提交的内容,如request.form("UserName"和request.form("assword"
如果赋值的字段类型是数字型的,则要去掉字符串两端的单引号,假设Password字段是
数值型,并且用户输入的是“1234”,则(此处略去数字输入校验):
strSql="insert into UserList (UserName,Password) values (" & _
"'" & me.txtUserName.text & "'," & _
me.txtPassword.text & ""
生成的结果为:
insert into UserList (UserName,Password) values ('MouseFly',1234)

如果字段类型是日期型,在 ADO中和处理字符串差不多,只不过要注意日期型字段的格
式,最好在组织 SQL字符串的时候对日期进行格式化保证年份是4位,如:
strSql="insert into UserList (UserName,Password,BirthDay) values (" & _
"'" & me.txtUserName.text & "'," & _
me.txtPassword.text & "," & _
"'" & format(me.txtBirth.text,"yyyy-mm-dd" & "')"
生成的结果为:
insert into UserList (UserName,Password,BirthDay) values
('MouseFly',1234,'1975-01-15')
如果使用的是VBScript,对日期进行格式化使用FormatDatetime函数。

论坛徽章:
0
2 [报告]
发表于 2003-01-17 21:49 |只看该作者

关于SQL语句中的引号问题(VB&VBScript)

明白
但是如果sql 语句中有'号呢
偶不想用vb时
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP