动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   VBScript → 阅读文章

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

作者来源: 
阅读 3203 人次 , 2006-4-3 0:01:00 


最近在网上看到不少网友因为在写 sql语句时因为引号引起的问题,我在刚开始用vb的
时候也经常犯这样或那样的错误,这次将使用的经验写出来与大家共享。

* 举例时以 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("password")。
如果赋值的字段类型是数字型的,则要去掉字符串两端的单引号,假设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函数。

 本文Tags数据库  组网  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:超级MD5加密算法(加密代码是COPY来的).用于VBSCRIPT/ASP中加密
· 下一篇:Email 炸弹 vbscript 版
· VBScript Int、Fix 函数
· VBScript DatePart 函数
· FileSystemObject 对象
· VBScript 派生数学函数
· 纯ASP(VBscript)写的全球IP地址搜索程序


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077