网站首页 手机版
 注册 登录
您现在的位置: 畅无忧设计 >> 数据库 >> MSSQL >> 正文
最新文章
· SQL Server 2005恢复数据库详细图文教
· 在SQL Server 2005中实现级联删除、级
· SQL Server 里面获得数据库表名称、列
· 查询出某字段值不为空的记录的SQL语句
· 解决SQL Server转ACCESS自动编号问题
· sql重复记录只显示一条记录
· SQL Server 2005处理海量数据
· SQL中把字段的设置为像Access中的自动
· SQL中把字段的默认值设置为当前时间
· SQL数据库备份、还原、转移详解
热门文章
 SQL中把字段的默认值设置为当前时间
 sql重复记录只显示一条记录
 查询出某字段值不为空的记录的SQL语
 SQL Server 2005恢复数据库详细图文
 SQL Server 里面获得数据库表名称、
 SQL Server性能优化入门
 在SQL Server 2005中实现级联删除、
 SQL中把字段的设置为像Access中的自
 SQL Server 2005处理海量数据
 解决SQL Server转ACCESS自动编号问
相关文章
没有相关文章
关于SQL语句中的引号问题(VB&VBScript)
来源:珠江在线 更新时间:2009/5/25 17:52:01 阅读次数:
字体:[ ] 我要投稿

  最近在网上看到不少网友因为在写 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函数。

  • 上一篇文章:
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 在线投稿 - 友情链接 - 网站地图 - 版权声明
    CopyRight 2008-2010, CWYDESIGN.COM - 畅无忧设计, Inc. All Rights Reserved
    滇ICP备09005765号