asp Cint溢出
VBS里,超出Integer类型的取值范围,该类型的取值范围为-32,768 到 32,767 之间的整数。
出错的根源:
在ASP里,有时候为了仿止注入,所以在接收参数的时候直接使用Cint函数把接过来的参数转换为Integer(数字)类型,这就存在一个潜在问题,当页面接收的某个参数(Request("xxx"))超过取值范围时(可简单理解为5位数字),就会发生此错误。这个是只有初级程序员会范的错误。
VBS里,超出Integer类型的取值范围,该类型的取值范围为-32,768 到 32,767 之间的整数。
cint范围 -32,768 到 32,767。 (5位整数)
clng范围 -2,147,483,648 到 2,147,483,647。
CCur范围 -922,337,203,685,477.5808 到 922,337,203,685,477.5807(15位数)
解决办法:
有两个方案:
一,快速解决方案,打开出错的页面,把所有的Cint函数换为CCur函数(用个字符替换软件,把Cint换为CCur)。转换后,取值范围将从-32,768 到 32,767 (5位整数)提升到-922,337,203,685,477.5808 到 922,337,203,685,477.5807(15位数),但此法也有潜在问题,如果接收数值超过15位,那也会溢出,不过如果只是处理ID字段(如果数据库里有,而且出错的是这个),那么可以放心,数据要达到15位数还是需要很长时间的。
二,完美解决方案,不要再使用Cint、CCur、Clng一类的转换函数,而应该使用IsNumeric 函数来进行判断,此法需要有一定的编程能力时行函数修改。
相关文档:
使用VB将ASP代码封装到DLL文件完整实例
http://blog.csdn.net/cncco/archive/2007/10/20/1834865.aspx
用VB封装ASP,建立SayHello测试程序
1、打开VB6,新建ActiveX DLL
2、在工程引用中加入Microsoft Active Server Pages Object Library选择
3、填加代码如下:
'Code Start
'声明部分
Private MyScriptingContext ......
请看如下源代码:
<%
'向数据库写入数据
SUB writeData()
dim recCnt,i
dim fieldName1,fieldName2,fieldName3
dim conn
dim sqlStr,connStr
connStr="Provider=SQLOLEDB.1;Initial Catalog=myDatabase;Data Source=myhon;User Id=sa;PASSWORD="
set conn=Server.CreateObject("ADODB.Connection")
c ......
这几天因为网站涉及到二极域名共用session的问题,头痛。在网上找了好久的料,终于在csdn里面找到2004年前辈们讨论的解决方案,个人感觉很
受用。
楼主
yufeiyxl(与
飞)
我要向各位请教的是Cookie的跨域访问问题。
......
<input name="total" type="text" value="<%=webcounter%>" size="12" onbeforepaste="clipboarddata.setdata('text',clipboarddata.getdata('text').replace(/[^\d]/g,''))"
onkeydown="subOnKeyDown()"
onkeyup="value=value.replace(/[^\d]/g,'')"/>
使用后 如果输入为非数字 ......