asp和SQL语法中引号的使用方法

首先接受一个概念:asp中只承认双引号,Access SQL中只承认单引号,HTML由于其不严谨,单双引号都承认。以上是我的一点经验总结,最终正确性还有待证实。

在asp中,要输出一个双引号,需要使用转义字符:两个双引号("")。
例如,
       要输出字符串 abc , 则 response.write("abc")
       要输出字符串 "abc , 则 response.write("""abc")              //两边的双引号括起,表示内部为一个字符串。终于剩余两个双引号,转义输出为一个双引号。
       要输出字符串 ab"c , 则 response.write("ab""c")
       要输出一个双引号 " , 则 response.write("""")              //这就是解释了为什么要写四个双引号了
此外,还有另外一种方法,就是使用ACSII字符
例如,
       要输出 ab"c , 则 response.write("ab" & chr(34) & "c")

接下来,让我们再看看SQL中的单引号问题。我们考虑这个问题,主要是为了允许自己在进行字符串数据库处理的时候不至于出错,和防止SQL注入。
来看看最简单的SQL注入,有一个留言板,其表单有一个name项。
在目标页面,有如下代码:
<%
       name = Request.Form("name")
       Conn.Execute "Insert Into GuestBook (name) VALUES (’" & name &"’)"
%>
如果我们提交的name为 Jacky, 则上面的SQL语句为 Insert Into GuestBook (name) VALUES (’Jacky’),很明显,这样符合我们的本意。
可是,如果我们提交的是 I’m Jacky, 则上面的语句变为 Insert Into GuestBook (name) VALUES (’I’m Jacky’), 然后,不幸的事情发生了,系统找到的第一个单引号是I’m中的单引号,于是系统认为用户想提交的字符串(包括引号)仅仅只是’I’.接下来的 m Jacky’) 系统就无法解释了,于是就认为你的语法错了。
如何解决呢?那就是再进行数据库处理前先将一个单引号替换为两个单引号,让系统将其解释为转义字符,代码如下:
<%
       name = Request.Form("name")
       name = Replace(name, "’", "’’")              //即 name = Replace(name, chr(39), chr(39)&chr(39))
       Conn.Execute "Insert Into GuestBook (name) VALUES (’" & name &"’)"
%>
再提交 I’m Jacky, SQL语句变为 Insert Into GuestBook (name) VALUES (’I’’m Jacky’), 在写入数据的时候,SQL会自动识别出两个单引号的转义字符,从而最终写入数据库的数据则为 I’m Jacky ,这就是我们所期待的正确结果。

时间: 2024-11-03 19:31:32

asp和SQL语法中引号的使用方法的相关文章

asp在SQL SER2k中新建帐号和给帐号权限的实现(转)

asp在SQL SER2k中新建帐号和给帐号权限的实现 发布于:2002-5-12 ' 以下为在asp中增加一个sql server2000用户函数,并为建立一个数据库,给他dbo的权限 ' ****************注意:sql server的验证方式不要选仅为windows方式, ' **************** 允许远程sql server连接 ' ****************该函数已通过测试**************************** ' 有什么问题欢迎和我交流

asp的SQL语句中and和or同时使用的注意事项

今天在调试程序的时候,需要用到and or,如果不掌握技巧输出的结构与我们想象的差距有点大,这里分享一下,希望大家以后多多支持脚本之家 asp的SQL语句中and 和or是不是不可以同时使用呢? 答案是肯定的,下面来看下方法: 1.非常负责任的告诉你,是可以同时使用的.但要看业务要求 2.使用的场景举例: 查询表中2000年和2002年出生的男同学 select * from 学生表 where 性别='男' and (出生年份=2000 or 出生年份=2002) 3.其实or可以用SQL中的

在asp.net 2.0中使用存储过程的方法

本文介绍了在asp.net 2.0中使用存储过程的方法. 以下是SQL中两个存储过程: 以下是引用片段: CREATE PROCEDURE dbo.oa_selectalluser AS select * from UserInfo GO CREATE PROCEDURE dbo.oa_SelectByID @id int AS select * from UserInfo where ID=@id GO 一个是带参数的存储过程,一个是不带参数的存储过程.下面介绍怎么在VS2005中使用这两个存

EXCEL数据上传到SQL SERVER中的简单实现方法_Mysql

EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下:  if (FileUpload1.HasFile) //如果用户确实选择了上传控件的浏览按钮,浏览文件成功. { this.FileUpload1.SaveAs("E:\\Temp\\" + FileUpload1.FileN

终止SQL Server中的用户进程方法

一.情景:在很多情况下,往往会要求数据库管理员终止SQL Server中的用户进程.本文将为大家介绍如何创建一个简单的存储过程来实现同时终止多个会话.结束连续的会话和结束连接到数据库的所有会话等功能. 在很多情况下,往往会要求数据库管理员终止SQL Server中的用户进程,例如在停止某个数据库的运作时,或者还原数据库之前,或者长时间运行活动事务等情况下.数据库管理员通常会使用SQL Server中提供的"KILL"命令来完成任务. 但是,SQL Server提供的"KILL

在ASP.NET 2.0中数据绑定的实现方法

1.为什么ASP.NET 2.0中的数据绑定控件不需要写代码就能完成更新.删除.新建等数据操作? ASP.NET 1.x时,DataGrid等控件使用DataBinder.Eval(Container.DataItem,"ColumnName")这样的表达式可以将数据源中的数据绑定到控件上,但并不能在更新数据时自动将控件中的新值取出,更新回数据库.所以ASP.NET 2.0中的数据绑定分为两种:单向数据绑定(即表达式或ReadOnly设为True的BoundField,只提供从数据源到

一起谈.NET技术,在ASP.NET 2.0中数据绑定的实现方法

1.为什么ASP.NET 2.0中的数据绑定控件不需要写代码就能完成更新.删除.新建等数据操作? ASP.NET 1.x时,DataGrid等控件使用DataBinder.Eval(Container.DataItem,"ColumnName")这样的表达式可以将数据源中的数据绑定到控件上,但并不能在更新数据时自动将控件中的新值取出,更新回数据库.所以ASP.NET 2.0中的数据绑定分为两种:单向数据绑定(即表达式或ReadOnly设为True的BoundField,只提供从数据源到

asp在SQL SER2k中新建帐号和给帐号权限的实现

' 以下为在asp中增加一个sql server2000用户函数,并为建立一个数据库,给他dbo的权限 ' ****************注意:sql server的验证方式不要选仅为windows方式, ' ****************     允许远程sql server连接 ' ****************该函数已通过测试**************************** ' 有什么问题欢迎和我交流,以后会推出对sql server的一些管理操作程序 ' 参数:StrLog

asp列出sql数据库中(PUBS数据库)存储过程及其例子

存储过程|数据|数据库 ---- 以下语句将列出数据库中(PUBS数据库)存贮过程 pubDatabase =oSQLServer.Databases("pubs")'oSQLServer是前面创建的SQL Server服务器对象For Each DBSP In pubDatabase.StoredProceduresResponse.Write DBSP.TextNext ---- 程序运行的结果(取数据表名): ---- 取存贮过程的结果: ---- 一个完整的小例子源码附后(其它