SSHH网络工作室

2009年6月4日

伪静态和真静态的区别|伪静态|真静态[转载]

一、伪静态的用处

有些用户觉得,伪静态和真静态实际被收录量会相差很大,其实不然,从你个人角度,你去判断一下一个帖子到底是真静态还是伪静态?估计很难看得出,因为所谓静态的意思,就是地址中不带问号,不带问号的就是静态,管他是真的还是伪的?搜索引擎看得出吗?所以说,其实不论是真的还是伪的,其实对于搜索引擎来说都是一样的,搜索引擎没有说,你这个是伪的,我不收录你。

追根究底来说,为什么搜索引擎会不收录带问号的网址?因为搜索引擎怕由于问号而进入死循环,称为“搜索机器人陷阱(Spidertraps)”(以前动网就有这样一个漏洞,蜘蛛进去出不来了),所以很多时候带问号的地址搜索引擎是不会进去的,伪静态对于搜索引擎来说,其实就是静态,因为地址中没有带问号,所以没有真静态比伪静态收录得多的说法。

二、为什么选择伪静态?

有很多用户说:真静态不好吗?为什么不用真静态?访问起来不是更快吗?负载不是更好吗?等等等等。。。。。。

在这里,其实只用一个问题来回答:为什么选择MYSQL?很多用户大概不明白为什么那么多大型论坛都选择了MYSQL数据库作为储存机制,大概大部分都是想:“因为DZ用了MYSQL,所以就是MYSQL”。

其实不然,试想DZ为什么会在那么多论坛程序并存的日子生存下来并笑傲江湖,很大原因是因为DZ用了MYSQL。试想如果大C当年改的程序是一个文本论坛,那还会有DZ的今天吗?或者从另一个角度问,为什么那么多大型网站都选择了MYSQL而不是文本作为储存机制?

所谓文本论坛,实际就跟真静态的说法差不多了,将数据储存在空间上面,大量读写硬盘,等等。。。。。。

为什么这种写法会被淘汰呢?我相信答案不会是老师所说的:“Discuz!目前有 2129867 篇帖子,存储成html的话大约是 20799M,也就是 20G左右。这当中还不计算由于磁盘存储机制造成的空间浪费(100个 1k的文件占用的空间可能会是200K)。”

这种说法从我个人观点来看,这个理由不能给用户不使用真静态充分的理由。然而,另一个理由却是值得我们注意思考的,也是为什么绝大多数站都不选择生成静态:

“删除、更新这些html内容会导致大量的磁盘io操作以及大量的磁盘碎片。”

正如上面的说法,在实际当中确实会导致大量的磁盘I/O操作(input/output),大量进行I/O操作带来的后果可想而知,会产生大量的磁盘碎片甚至会导致硬盘出现坏道。

所以对于生成静态而言,还不如去用文本论坛,可以更好的解决你们的需求。(副W就是做文本论坛出生的,当时的名字为ofstar,后因发展困难转为MYSQL,而PW生成静态页面也就是PW以前文本方式稍加改进用于吸引用户眼球的噘头)

当然,如果大家记忆力好的话,应该可以记得PW4的时候PW论坛不能访问很长一段时间,后来恢复到一段时间前的数据,官方的说法是被人攻击而导致硬盘损坏,其实这种说法是比较不可信的,相对于是被攻击导致硬盘损坏还是大量I/O操作而产生的后果,我个人更倾向于后者。

当然,如果大家比较关注5d6d的话,应该知道前几天有一天时间5d6d无法访问,根据非官方消息是因为硬盘坏了,而损坏的原因我想当然是因为大量用户大量进行I/O操作了,试想,我们一个论坛,进行磁盘I/O操作的仅为管理员进行更新缓存时进行的,而5d6d每一个会员就是一个管理员,试想下对磁盘是多大的考验?所以我并不奇怪5d6d的硬盘坏了。

当然,也许在读这篇文章的很多朋友都有使用过BT,也听说过BT对硬盘很伤,不能开多,而所谓伤害,和这里指的都是同一样东西,大量I/O导致磁盘出现碎片甚至出现磁盘坏道。

这里都是说些很实际的例子来说明问题了。

三、伪静态的坏处

当然犹如一篇文章的作者所说的:"如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线300多人就挂了,而不使用伪静态的时候同时在线超500人都不挂,我的ISS数是1000。”

确实是这样的,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病。

四、我们应该选择伪静态还是真静态?

我们来总结一下:

1、使用真静态和假静态对SEO来说没有什么区别
2、使用真静态可能将导致硬盘损坏并将影响论坛性能
3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
4、最重要的一点,我们要静态是为了SEO

所以:
1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
2、既然真伪静态的效果一样,我们就可以选择伪静态了。
3、但是伪静态大量使用会照成CPU超负荷。
4、所以我们只要不大量使用就可以了。
5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
7、谢谢大家耐心看我写的文章。
8、有何不解的地方或是有不同的看法欢迎提出。

五、关于伪静态和真静态的评论

真正的静态化和伪静态还是有本质的区别的。为浏览用户处理一个纯粹htm和一个调用多个数据的php在CPU的使用率方面明显前者少。记得原来有个人说html下载硬盘读写频繁,他这么说好像读取数据库不用读写磁盘似的,何况还有一大堆缓存的零散php也是放在硬盘的,这些读取不用磁盘操作么?可笑。

读取单个htm+图片Flash等附件就可以实现的目的,何苦要读数据库又要读php缓存文件又要重新整合数据输出再+图片Flash等附件这么大费周章呢?CMS首页不需要很多的互动的,论坛那一套不应该拿到这里来用,相反应该更多考虑的是:美观!兼容!信息的直观!性能!还有稳定!

posted @ 2009-06-04 16:57 山虎 阅读(20) | 评论 (0)编辑

2009年5月26日

[转帖]一些.NET面试题的回答

     摘要: [转帖]一些.NET面试题的回答任何一个使用.NET的人 1) 描述线程与进程的区别? 线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间... 阅读全文

posted @ 2009-05-26 11:20 山虎 阅读(19) | 评论 (0)编辑

2009年4月15日

oracle下的exp和imp的使用

Oracle的导入实用程序(Import utility)允许从数据库提取数据,并且将数据写入操作系统文件。imp使用的基本格式:imp[username[/password[@service]]],以下例举imp常用用法。
1. 获取帮助
imp help=y
2. 导入一个完整数据库
imp system/manager file=bible_db log=dible_db full=y ignore=y
3. 导入一个或一组指定用户所属的全部表、索引和其他对象
imp system/manager file=seapark log=seapark fromuser=seapark imp
system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
4. 将一个用户所属的数据导入另一个用户
imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
imp system/manager file=tank log=tank fromuser=(seapark,amy)
touser=(seapark1, amy1)
5. 导入一个表
imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
6. 从多个文件导入
imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y
7. 使用参数文件
imp system/manager parfile=bible_tables.par


bible_tables.par参数文件:

#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import
备份整个数据库
exp username/pwd@sid file=c:\file.dmp full=y
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径,
该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。
下面介绍的是导入导出的实例。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面 加上 compress=y 来实现。
数据的导入
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。
注意:
操作者要有足够的权限,权限不够它会提示。
数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。
附录一:
给用户增加导入数据权限的操作
第一,启动sql*puls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码(如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
imp userid=system/manager full=y file=*.dmp
或者 imp userid=system/manager full=y file=filename.dmp
执行示例:
SQL> grant connect, resource, create view to test identified by test;
F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp
屏幕显示
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation. All rights reserved.
连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
经由常规路径导出由EXPORT:V08.01.07创建的文件
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)
. 正在将AICHANNEL的对象导入到 AICHANNEL
. . 正在导入表 "INNER_NOTIFY" 4行被导入
准备启用约束条件...
成功终止导入,但出现警告。
附录二:
Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.
先建立import9.par,
然后,使用时命令如下:imp parfile=/filepath/import9.par
例 import9.par 内容如下:
FROMUSER=TGPMS
TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)
ROWS=Y
INDEXES=Y
GRANTS=Y
CONSTRAINTS=Y
BUFFER=409600
file==/backup/ctgpc_20030623.dmp
log==/backup/import_20030623.log

posted @ 2009-04-15 10:33 山虎 阅读(72) | 评论 (0)编辑

Oracle exp/imp导出导入工具的使用

一. 导出工具 exp

1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin

exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移

它有三种模式:
a. 用户模式: 导出用户所有对象以及对象中的数据;
b. 表模式: 导出用户所有表或者指定的表;
c. 整个数据库: 导出数据库中所有对象。

2. 导出工具exp交互式命令行方式的使用的例子

$exp test/test123@appdb
Enter array fetch buffer size: 4096 > 回车
Export file: expdat.dmp > m.dmp 生成导出的文件名
(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3
Export table data (yes/no): yes > 回车
Compress extents (yes/no): yes > 回车
Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set
About to export specified tables via Conventional Path ...
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu 要导出的表名
. . exporting table CMAMENU 4336 rows exported
Table(T) or Partition(T:P) to be exported: (RETURN to quit) >要导出的表名n
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 回车
Export terminated successfully without warnings.

3. 导出工具exp非交互式命令行方式的例子

$exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y

说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp

$exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\<1600\" file="/directory/scott2.dmp
说明:在exp里面加上导出emp的查询条件job='salesman' and sal<1600

(但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)

$exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log

参数文件username.par内容
userid=username/userpassword
buffer=8192000
compress=n
grants=y

说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改

filesize指定生成的二进制备份文件的最大字节数

(可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)

二.导入工具 imp

1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin

imp导入工具将EXP形成的二进制系统文件导入到数据库中.

它有三种模式:
a. 用户模式: 导出用户所有对象以及对象中的数据;
b. 表模式: 导出用户所有表或者指定的表;
c. 整个数据库: 导出数据库中所有对象。

只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入

imp步骤:
(1) create table (2) insert data (3) create index (4) create triggers,constraints

2.导入工具imp交互式命令行方式的例子
$ imp
Import: Release 8.1.6.0.0 - Production on 星期五 12月 7 17:01:08 2001
(c) Copyright 1999 Oracle Corporation. All rights reserved.
用户名: test
口令:****
连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
导入文件: expdat.dmp> /tmp/m.dmp
输入插入缓冲区大小(最小为 8192 ) 30720>
经由常规路径导出由EXPORT:V08.01.06创建的文件
警告: 此对象由 TEST 导出, 而不是当前用户
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
只列出导入文件的内容(yes/no):no>
由于对象已存在, 忽略创建错误(yes/no):no> yes
导入权限(yes/no):yes>
导入表数据(yes/no):yes>
导入整个导出文件(yes/no):no> yes
. 正在将TEST的对象导入到 SCOTT
. . 正在导入表 "CMAMENU" 4336行被导入
成功终止导入,但出现警告。


3.导入工具imp非交互式命令行方式的例子

$ imp system/manager fromuser=jones tables=(accts)
$ imp system/manager fromuser=scott tables=(emp,dept)
$ imp system/manager fromuser=scott touser=joe tables=emp
$ imp scott/tiger file = expdat.dmp full=y
$ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log
$ imp system/manager parfile=params.dat
params.dat 内容
file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp)

4.导入工具imp可能出现的问题

(1) 数据库对象已经存在
一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;
数据库对象已经存在, 按缺省的imp参数, 则会导入失败
如果用了参数ignore=y, 会把exp文件内的数据内容导入
如果表有唯一关键字的约束条件, 不合条件将不被导入
如果表没有唯一关键字的约束条件, 将引起记录重复

(2) 数据库对象有主外键约束
不符合主外键约束时, 数据会导入失败
解决办法: 先导入主表, 再导入依存表
disable目标导入对象的主外键约束, 导入数据后, 再enable它们
(3) 权限不够
如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限

(4) 导入大表( 大于80M ) 时, 存储分配失败
默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.
导入时, 如果不存在连续一个大数据块, 则会导入失败.
导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.

(5) imp和exp使用的字符集不同
如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.
导入完成后再改回来.

(6) imp和exp版本不能往上兼容
imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件
根据情况我们可以用
$ imp username/password@connect_string
说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora
定义的本地或者远端数据库的名称
注意事项:
UNIX: /etc/hosts 要定义本地或者远端数据库服务器的主机名
win98: windows\hosts 和IP地址的对应关系

win2000: winnt\system32\drivers\etc\hosts

posted @ 2009-04-15 10:32 山虎 阅读(64) | 评论 (0)编辑

2009年4月10日

总结MasterPage中的资源文件引用路径

母版页引用的脚本的相对路径该怎么写?
起因:对于这个相对路径是对于母版页还是对于内容页。答案是内容页,(母版页只是替换内容页),这样就遇到了一个问题:当内容页和母版页不在同一个目录下的时候,并且内容页也分别放在不同的文件夹下的时候,不同的内容页对于脚本引用的相对路径就有所不同。
提出问题:关于母版页MasterPage中引用 JavaScript,CSS的问题,如果所有套用模板的页面都在同一个路径下,这个问题就不存在了。但是在实际中为了方面管理,往往会建立一些文件夹, 将引用的MasterPage放到不同的文件夹下,这是在MasterPage引用的JS,CSS文件由于路径的问题,在套用母版页中的内容页面中不一定 都能访问到。那这个问题该如何解决了?
解决问题:通过自己的努力思考和网上的参考资料得到一些解决办法:
方法一: string JSFile = "〈script language=\"javascript\" src=\"{0}\" type=\"text/javascript\">〈/script>";
Response.Write(string.Format(JSFile,ResolveUrl("~/Javascript/jquery.js")));

这个方法虽然可以快速解决问题,但是Response.Write是将脚本的引用写到了Html页面的开头,这就破坏了XHTML的格式,会带来各 种存在的隐患,据资料:用ASP.net AJAX开发,发现很多Asp.net AJaxControlToolkit中很多控件不起作用了。后来发现说是由于Response.Write引起的结果。

方法二:
string JSFile = "〈script language=\"javascript\" src=\"{0}\" type=\"text/javascript\">〈/script>";
Page.Header.InnerHtml = string.Format(JSFile,ResolveUrl("~/Javascript/jquery.js"));

这种方法就可以实现而且可以很好的解决方法中的问题。

方法三:
HtmlLink link = new HtmlLink();
link.Href = string.Format(JSFile,ResolveUrl("~/CSS/base.css"));
link.Attributes["rel"] = "stylesheet"; link.Attributes["type"] = "text/css";
page.Header.Controls.Add(link);
这是注册样式的一种方法。
方法四:注册客户端脚本的方法,结合ASP.NET AJAX 中的ScriptManager控件来实现。

用ScriptManager,这是ASP.net AjaxConrolToolkit的一个控件,通过这个控件爱你可以很好的动态的根据所引用母版页的脚本路径,自动的把母版页中引用的相对于母版页中的路径转换成相对于所引用内容页的相对路径。用法如下: 前提条件:装了ajax在.net环境中的组件才能用〈asp:ScriptManager>,还用注意一点,这个控件还需要给程序指定一个资源的脚本文件,是在System.web.Extensions中的。所以需要在web.config中指定:


〈asp:ScriptManager ID="ScriptManagerMain" EnablePageMethods="true" runat="server">
〈Scripts>
〈asp:ScriptReference ScriptMode="Auto" Path="~/JavaScript/Common.js" />这里是相对于母版页的相对路径,当然也可以用Path=”~/JS/Jscript1.js”(相对于网站的根目录)也可以实现。
〈/Scripts>
〈/asp:ScriptManager>

〈httpHandlers>
〈add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
〈/httpHandlers>
其他一些方法:
1.既然不同页面所引用的脚本路径不同,那就把它分开,不把引用的脚本文件放到母版页,而把脚本文件的引用分别放到各自引用的页面上。这是一种不是办法的办法。虽然不是好办法,但是能够解决这个问题。
2.用你的网站所在的服务器的根目录,注意不是你的网站的根目录,用这种符号“/”来表示,但是这样的可移植性比较差。因此当网站的根目录与服务器根目录不同时,就会发生错误。

最后补充一点:一些符号的含义:
./Image/和Image/ 相对路径
../ 相对于当前路径的上一级的路径
~/是相对于网站根目录的相对路径。(注意这是只能在服务器端识别,客户端不能识别)
/表示相对于网站所在服务器根目录的相对路径(注意这是相对于服务器的根目录而不是网站根目录)

posted @ 2009-04-10 14:57 山虎| 编辑

2009年3月18日

Asp.Net 连接Oracle数据库 出现"找到 Oracle 客户端和网络组件" 的解决方法

无法加载 DLL (oci.dll)
Asp.Net 连接Oracle数据库 出现"找到 Oracle 客户端和网络组件" 彻底解决方法!

是因为ntfs权限管理的问题,针对安装在window server上的oracle9i,必须将ora92文件夹重新赋给authenticated users用户读取运行权限,原因是在安装oracle时,oracle不能正确的赋这个权限

先删除该用户,再添加,选上“允许来自父系的可集成权限传播给该对象”,然后应用一下,就可以通过ado或者ado.net实现与oralce数据库的访问了

该问题只存在于ntfs文件格式上安装oralce9i


用Asp.Net做的程序本地访问oracle数据库时,在自己机器上好好的能访问,但是当放到服务器时
就不能出现如下的错误:
"Oracle client and networking components were not found. These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3.3 or later client software installation. Provider is unable to function until these components are installed. "
据我的理解:1.是在 Oracle 9.02i 版的问题,2.你的 ORACLE_HOME 路径所在的分区格式是:NTFS格式;解决方法 到Oracle\ora92 打开Ora92的-》属性-》安全,选Authenticated Users 看下面的属性 将Read and Execute 的勾去掉,然后又勾上,确定重新启动机器 ,ok 搞定,就是这么简单,
当然要避免这种问题,您可以这么做:不要安装Oracle9.02 或者不要安装在NTFS格式的分区
附上
Oracle 公司的原版资料:
Problem Description ------------------- When running an application that connects to Oracle and uses the Authenticated User privilege (such as Microsoft's Internet Information Server (IIS)) via Oracle's 9.2 client software and any of these programmatic interfaces      1. Oracle Provider for OLE DB     2. Microsoft OLE DB Provider for Oracle     3. Oracle ODBC Driver     4. Microsoft ODBC for Oracle     5. Oracle Objects for OLE (OO4O) you will receive one of the following errors:      (1) Oracle Provider for OLE DB         Error Type: Microsoft OLE DB Service Components (0x80070005)         Access is denied.      (2) Microsoft OLE DB Provider for Oracle          Error Type: Microsoft OLE DB Provider for Oracle (0x80004005)         Oracle client and networking components were not found. These components        are supplied by Oracle Corporation and are part of the Oracle Version        7.3.3 or later client software installation. Provider is unable to        function until these components are installed.         Or         Error Type: Microsoft OLE DB Provider for Oracle (0x80004005)                Oracle error occurred, but error message could not be retrieved from        Oracle.      (3) Oracle ODBC Driver         Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80004005)         Specified driver could not be loaded due to system error 5 (Oracle in        OraHome92).      (4) Microsoft ODBC for Oracle         The Oracle(tm) client and networking components were not found. These        components are supplied by Oracle Corporation and are part of the Oracle         Version 7.3 (or greater) client software installation.         You will be unable to use this driver until these components have been        installed.      (5) Oracle Objects for OLE          (a) while using a GLOBAL.ASA file             Error Type: Active Server Pages (0x0)             An error occurred while creating object 'OraSession'.          (b) not using a GLOBAL.ASA file             Error Type: Microsoft VBScript runtime (0x800A0046)             Permission denied: 'CreateObject'      (6) Other miscellaneous errors         (a) The Specified Module Could Not Be Found   Solution Description -------------------- You need to give the Authenticated User privilege to the Oracle Home by following these steps:     1. Log on to Windows as a user with Administrator privileges.    2. Launch Windows Explorer from the Start Menu and and navigate to the        ORACLE_HOME directory.    3. Right-click on the ORACLE_HOME folder and choose the "Properties" option        from the drop down list. A "Properties" window should appear.    4. Click on the "Security" tab on the "Properties" window.    5. Click on "Authenticated Users" item in the "Name" list (on Windows XP the        "Name" list is called "Group or user names").    6. Uncheck the "Read and Execute" box in the "Permissions" list (on Windows        XP the "Permissions" list is called "Permissions for Authenticated Users").        This box will be under the "Allow" column.    7. Check the "Read and Execute" box. This is the box you just unchecked.    8. Click the "Apply" button.    9. Click the "OK" button.   10. You may need to reboot your computer after these changes have been made. Re-execute the application and it should now work.     Explanation ----------- If you install Oracle9i Release 2 (9.2.0.1) on a computer running Windows with an NTFS partition, the contents of ORACLE_HOME directory will not be visible to users who are authenticated on that machine. These permissions were not set properly when the software was installed. Applications that were working fine with previous versions of Oracle software will stop working when they upgrade to Oracle 9.2.    NOTE: The application will continue to work if the user has logged onto the         machine as an Administrator. Any application that is using the Authenticated User privilege will not work. A notable example would be IIS which might service some of the requests based on the Authenticated User privileges. To demonstrate the problem in further detail, you can log on to the operating system as an authenticated machine user. You won't be able browse the contents of the ORACLE_HOME directory demonstrating your inability to load any Oracle DLLs or make a connection.   References ----------    Bug:2498880 - Oracle 9I Release 2 Installation Issue on Windows 2000 NTFS                 File System   Additional Search Words ----------------------- OLEDB

posted @ 2009-03-18 17:25 山虎 阅读(57) | 评论 (0)编辑

GB2312转UTF-8相关问题

网上找了一些资料看看了,但是都不太完全

研究了一下,还是写一下吧,给需要的人

                              By SSHHNET

第一、要在所有页面前面添加如下三行,可以写Conn.asp里面

<%@CODEPAGE="65001"%>
<%Session.CodePage=65001%>
<%Response.charset = "utf-8"%>

第二、要在页面添加

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

第三、如果生成静态页面要使用 ("ADODB.Stream")

注意如果使用("Scripting.FileSystemObject")只能生成文本类型文件UTF-8会乱码

如:set fso=server.CreateObject("ADODB.Stream")

 

 

posted @ 2009-03-18 09:32 山虎 阅读(16) | 评论 (0)编辑

2009年2月23日

数据列表 DataList

数据列表 DataList
数据列表显示跟重复列表(Repeator)比较类似,但是它可以选择和修改数据项的内容。数据列表的数据显示和布局也如同重复列表都是通过“模板”来控制的。同样的,模板至少要定义一个“数据项模板”(ItemTemplate)来指定显示布局。数据列表支持的模板类型更多,它们如下:
1) ItemTemplate模板,数据项模板,必需的,它定义了数据项极其表现形式。
2) AlternatingItemTemplate模板,,数据项交替模板,为了使相邻的数据项能够有所区别,可以定义交替模板,它使得相邻的数据项看起来明显不同,缺省情况下,它和ItemTemplate模板定义一致,即缺省下相邻数据项无表示区分。
3) SeparatorTemplate模板,分割符模板,定义数据项之间的分割符。
4) SelectedItemTemplate模板,选中项模板,定义被选择的数据项的表现内容与布局形式,当未定义”SelectedItemTemplate”模板时,选中项的表现内容与形式无特殊化,由ItemTemplate模板定义所决定。
5) EditItemTemplate模板,修改选项模板,定义即将被修改的数据项的显示内容与布局形式,缺省情况下,修改选项模板就是数据项模板(ItemTemplate)的定义。
6) HeaderTemplate模板,报头定义模板,定义重复列表的表头表现形式。
7) FooterTemplate模板,表尾定义模板,定义重复列表的列表尾部的表现形式。
数据列表还可以通过风格形式来定义模板的字体、颜色、边框。每一种模板都有它自己的风格属性。例如,可以通过设置修改选项模板的风格属性来指定它的风格。
此外,还有一些其他属性可以导致数据列表的显示有较大的改变,下面择重说明。
RepeatLayout:显示布局格式,指定是否以表格形式显示内容。
RepeatLayout.Table指定布局以表格形式显示。
RepeatLayout.Flow指定布局以流格式显示,即不加边框。
RepeatDirection:显示方向,指定显示是横向显示还是纵向显示
RepeatDirection.Horizontal指定是横向显示
RepeatDirection.Vertical指定是纵向显示
RepeatColumns:一行显示列数,指定一行可以显示的列数,缺省情况下,系统设置为一行显示一列。这里需要注意的是,当显示方向不同时,虽然一行显示的列数不变,但显示的布局和显示内容的排列次序却有可能大不相同。
例如:有10个数据需要显示,RepeatColumns设定为4,即一行显示4列时
当RepeatDirection=RepeatDirection.Horizontal横向显示时,显示布局如下:
Item1 Item2 Item3 Item4
Item5 Item6 Item7 Item8
Item9 Item10
当RepeatDirection=RepeatDirection.Vertical纵向显示时,显示布局如下:
Item1 Item4 Item7 Item10
Item2 Item5 Item8
Item3 Item6 Item9
BorderWidth:当RepeatLayout=RepeatLayout.Table即以表格形式显示时,边框的线宽度
Unit.Pixel(x) x>=0,当x为0时无边框
GridLines: 当RepeatLayout=RepeatLayout.Table以表格形式显示时,在表格当中是否有网隔线分离表格各单元。
GridLines=GridLines.Both,有横向和纵向两个方向的分割线。
GirdLines=GridLines.None,无论横向还是纵向均无分割线。

例子:演示以上介绍的各属性的设置对数据列表输出的影响,并且当数据项被选中时,数据项以粉红色来反显。

1.源程序(DataList.aspx)

<%@ Import Namespace="System.Data" %>








数据列表属性方法实验




BorderColor="black"
CellPadding="3"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
AlternatingItemStyle-BackColor="#ccccff"
SelectedItemStyle-BackColor="#ffccff"
OnItemCommand="DataList1_ItemCommand"
>







显示方向:

横向
纵向

布局类型:

表方式
流方式

一行列数:

1列
2列
3列
4列
5列

边框显示:

网格显示:










3.当选择显示方向为横向,表方式,一行含5列,显示边框和网格时,界面显示如下:
4. 选择纵向显示,表方式,一行含5列,无边框,无网格时,界面显示如下:5.当在步骤4的基础上选择了第5项数据项时,界面显示如下:


接下来,我们讨论一下一种比较有实际意义的应用,即对选中数据项的修改的实现。
首先是对模板EditItemTemplate的定义,通常做法是排列可以进行修改的内容,然后定义一个修改确认键和一个修改取消键。
然后应定义数据列表支持的三种消息处理函数即OnEditCommand、OnUpdateCommand、OnCancelCommand(编辑事件处理、修改事件处理、撤消修改事件处理)
编辑事件处理:通常设置数据列表的EditItemIndex属性为选中的数据项索引,然后重载数据列表。
Protected Sub DataList_EditCommand(Source As Object, e As DataListCommandEventArgs)
DataList1.EditItemIndex = CType(e.Item.ItemIndex, Integer)
‘重新加载并绑定数据
BindList()
End Sub

取消修改事件处理:通常设置数据列表的EditItemIndex为-1,表示没有数据项需要修改,然后重载数据列表
Protected Sub DataList_CancelCommand(Source As Object, e As DataListCommandEventArgs)
DataList1.EditItemIndex = -1
BindList()
End Sub

修改事件处理:通常先修改数据源的数据,然后设置数据列表的EditItemIndex为-1,最后重载数据列表。
Sub DataList_UpdateCommand(Source As Object, e As DataListCommandEventArgs)
‘修改数据源数据,应根据具体情况而变
ModifySource()
DataList.EditItemIndex=-1
BindList
End Sub

例子:显示一个关于书籍修改的实例。一条书籍记录包含序号、书名、价格信息。初始化数据时,我们设置序号为1-6,书名为“书名”+序号,价格为1.11*序号。

1. 源程序(FormDataList01.aspx)
<
<%@ Import Namespace="System.Data" %>







数据列表修改实验









BorderColor="black"
BorderWidth="1"
GridLines="Both"
CellPadding="3"
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
Width="150px"
HeaderStyle-BackColor="#aaaadd"
AlternatingItemStyle-BackColor="Gainsboro"
EditItemStyle-BackColor="green"
OnEditCommand="DataList_EditCommand"
OnUpdateCommand="DataList_UpdateCommand"
OnCancelCommand="DataList_CancelCommand"
>









2. 准备对第2项进行修改,此时的画面如下:


3.把序号为2的书籍的价格改为9.99以后,重新进入其编辑状态后,它的输出画面如下:

2.2.15 数据表格DataGrid
数据表格服务器端控件以表格形式显示数据内容,同时还支持数据项的选择、排序、分页和修改。缺省情况下,数据表格为数据源中每一个域绑定一个列,并且根据数据源中每一个域中数据的出现次序把数据填入数据表格中的每一个列中。数据源的域名将成为数据表格的列名,数据源的域值以文本标识形式填入数据表格中。
通过直接操作表格的Columns集合,可以控制数据表格各个列的次序、表现方式以及显示内容。缺省的列为Bound型列,它以文本标识的形式显示数据内容。此外,还有许多类型的列类型可供用户选择。
列类型的定义有两种方式:显视的用户定义列类型和自动产生的列类型(AutoGenerateColumns)。当两种列类型定义方式一起使用时,先用用户定义列类型产生列的类型定义,接着剩下的再使用自动列定义规则产生出其他的列类型定义。请注意自动定义产生的列定义不会加入Columns集合。
列类型介绍:
1) bound column ,列可以进行排序和填入内容。这是大多数列缺省用法。
两个重要的属性为:HeaderText指定列的表头显示
DataField指定对应数据源的域
2) hyperlink column,列内容以hyperlink控件方式表现出来。它主要用于从数据表格的一个数据项跳转到另外的一个页面,做出更详尽的解释或显示。
重要的属性有:
HeaderText指定列表头的显示
DataNavigateUrlField指定对应数据源的域作为跳转时的参数
DataNavigateUrlFormatString指定跳转时的url格式
DataTextField指定数据源的域作为显示列内容来源
3) button column,把一行数据的用户处理交给数据表格所定义的事件处理函数。通常用于对某一行数据进行某种操作,例如,加入一行或者是删去一行数据等等。
重要的属性有:
HeaderText指定列表头的显示
Text指定按钮上显示的文字
CommandName指定产生的激活命令名
4) Template column,列内容以自定义控件组成的模板方式显示出来。通常用作用户需要自定义显示格式的时候。
5) Edit Command column,当数据表格的数据项发生编辑、修改、取消修改时,相应处理函数的入口显示。它通常结合数据表格的EditItemIndex属性来使用,当某行数据需要编辑、修改、取消操作时,通过它进入相应的处理函数。例如,当需要对某行数据进行修改(update)时,通过它进入修改的处理步骤中。

其他重要列属性介绍:
1) Visible属性,控制定义的列是否出现在显示的数据列表中。
2) AllowSorting属性,是否可以进行列排序。当AollowSorting=true时,可以以点击列的列表头的方式,把数据以该列次序进行排序。缺省的(即载入数据后)的排序方式,实际上是以数据在数据源中的排列次序进行排序的。
3) AllowPage属性,是否以分页方式显示数据。当对有大量数据的数据源进行显示时,可以以例如10行一页的方式来显示数据,同时显示一个下页/前页的按钮,按下按钮可以以向前或向后的方式浏览整个数据源的数据。当AllowPage=true时,即以分页方式进行显示。可以通过设定CurrentPageIndex属性来直接跳转到相应的数据页。

例子:演示以上各种类型的列定义的用法
1. 源程序(FormDataGrid.aspx)


<%@ Import Namespace="System.Data" %>








数据表格列类型实验







图书清单


BorderColor="black"
BorderWidth="1"
GridLines="Both"
CellPadding="3"
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
AutoGenerateColumns="false"
OnItemCommand="Grid_Command">





HeaderText="链接"
DataNavigateUrlField="Num"
DataNavigateUrlFormatString="FormDataGrid01.aspx?id={0}"
DataTextField="Num"
Target="_new"
/>













订购清单


BorderColor="black"
BorderWidth="1"
CellPadding="3"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
/>





文件FormDataGrid01.aspx的内容:








数据表格链接测试结果画面






您选择的是 第 <%= num %>本藏书




2. 开始时画面:


3.当选择订购了第一本和第三本后的画面如下:


4.当选择退订第三本书后的画面如下:


5. 当点击连接第六项时的画面如下:

posted @ 2009-02-23 15:53 山虎 阅读(96) | 评论 (0)编辑

2009年2月10日

分页存储过程UP_GetRecordByPageOrder和UP_GetRecordByPage

------------------------------------
--用途:支持任意排序的分页存储过程
--说明:
------------------------------------
CREATE PROCEDURE [dbo].[UP_GetRecordByPageOrder]

@tblName varchar(255), -- 表名
@fldName varchar(255), -- 显示字段名
@OrderfldName varchar(255), -- 排序字段名
@StatfldName varchar(255), -- 统计字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量(查询条件过长时可能会出错,可修改100为1000)
declare @strOrder varchar(400) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @OrderfldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @OrderfldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['
+ @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['
+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @OrderfldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['
+ @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['
+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @OrderfldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where ' + @strWhere
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end

if @IsReCount != 0
set @strSQL = @strSQL+' select count(1) as Total from [' + @tblName + ']'
if @strWhere!=''
set @strSQL = @strSQL+' where ' + @strWhere
exec (@strSQL)

 

 

 

 


2,
------------------------------------
--用途:分页存储过程(对有主键的表效率极高)
--说明:
------------------------------------
CREATE PROCEDURE [dbo].[UP_GetRecordByPage]
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 主键字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量(查询条件过长时可能会出错,可修改100为1000)
declare @strOrder varchar(400) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
set @strTmp =''
if @strWhere != ''
set @strTmp = ' where ' + @strWhere
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
if @IsReCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere
exec (@strSQL)

posted @ 2009-02-10 14:25 山虎 阅读(162) | 评论 (0)编辑

2009年2月2日

谁能逗笑10086话务小姐? (转载)

没有美女陪伴,没有money买饭,宿舍几个哥们儿寂寞难耐,百无聊赖,宿舍第一猛男曹老大不知在哪捅出了灵感,说要哥几个各显神通给中国大名鼎鼎的中国移动通讯10086人工服务台打电话,无论什么手段,不许说脏话,还得把服务台小姐逗乐了,谁先逗乐合伙请他一顿饭,我乃一文人,耍不得嘴皮子,只能把他们打电话的内容汇总成文,供大家品之一笑,笑不笑由你。
魏老八 VS 1021号话务员 (魏老大刚开是接了一个是个男话务员,气晕,直接挂机,后拨通了1021,终于是个女的说话了。老八一口河北纯正地方方言,没说过普通话)
  
    
  您好,您有什么事情需要帮助?   
  喂,你好啊?听地懂俺说话不?   
  先生可以的!  
  刚才那个说听不懂俺缩(说)话哩!   
  现在还可以,您有什么业务需要咨询啊!   
  俺这四(是)标准话不?   
  先生(话务员有点笑的意思,气有点喘),您的话我可以听清,请说您想咨询的业务好吗?
  
  你们缩(说)地四(是)标准话吗?俺听周(这个)别扭!俺就四想问一下啊,这个短信包是走摸(怎么)回四(事)啊!   
  短信包是你办理之后短信包月的一项业务!   
  不四给个包啊?   
  不是!(话务员笑着喷出了气说)不是!   
  哦,不四给个挎着地包啊?   
  不是!   
  他们缩(说)短信包短信包发发短信给个包哩!   
  不是!   
  俺寻思它给个包哩,俺这快要放假咧,俺包不够我寻思给个包哩!  
  没有的!
  
  它走摸(怎么)个包月法!   
  这个呢您需要办理一下,您要是没有办理呢,也没有关系的,它不是给书包!   
  哦,不四啊!   
  请问您还有其他业务需要咨询吗?   
  有,俺这四动感地盘地卡,俺地底盘听俺地,俺能上网不!   
  那要看您的手机支持不!有没有GPRS功能?   
  俺不知道啊!   
  那您看一下您的手机说明书!   
  俺这个没,没有缩(说)名苏(书)啊!俺这四(是)四手地手机拉,买地旧地。
  
  那您可以到我们营业大厅办理一下,带上你的机主身份证!   
  哦,还得去那啊,娘哎!离俺这老远哩,俺没法去哩,俺这四(是)个村儿!要四上了网要钱不?   
  您开通这项业务是不要钱的,您要是下载里面的东西安数流量收取,1KB3分钱!   
  KB四嘛玩意啊?   
  这是名词,代表您下载东西的多少!   
  哦,俺还四不知道!那俺还四不开通咧!   
  没关系的!请问您还有什么业务需要咨询吗?
  
  有,这个手机卡四嘛玩意啊?四先有地手机啊还四先有地卡啊?
  (对方一阵巧击键盘的声音,并发出无奈的笑声)   
  这个问题不在我们服务范围之内!   
  哦,不在范围子(之)内啊!那他们跟俺说俺这手机有蓝牙四(四)走摸(怎么)回四(事)呢?   
  蓝牙是你手机本身自带的一种功能,它可以传输信息!  
  哦,明白点咧,有绿牙不!  
  呵呵,没有,先生您要是没有其他业务请您挂机,我们只允许10分钟通话时间,现在是9分18秒,您要是不明白的话请您一会继续拨打!
  
  哦,那麻烦你了小姐啊,再见吧!你地笑好甜啊!(挂机)
  (费尽周折,终于逗笑了一个……)
  我们首先 拨通了苏州的1860然后问小姐:“小姐,我想用手机上网可以吗?”   
  可以的。(一个很温柔,很好听的MM声音说的)   
  那我想上一些黄色网站下载图片可以吗?  
  (那边沉默一会)那要看你的手机是不是支持了,你可以上移动梦网查询一下。   
  
  (下面切入主题,也是我们的目的)小姐请问你妈B上为什么挂铃铛啊?(我们宿舍一个强淫想出来的问题)   
  那边无语,立马挂断...........   
  隔5分钟,由于是晚上12点左右,苏州的1860好象就3个人值班,2个女的一个男的,我们把男的接到电话全部掐了,另外一个小姐的号码也掐了,只找原来那个。   
  而且有3个电话卡,轮流拨打。继续是问一些很普通的问题。最后来一句:“你妈B上为什么挂铃铛啊?”
  那边2次挂断之后,第3次了,小姐说:“你在骚扰,法庭上见!” 我们小郁闷了一下,知道不可能的。所以继续折磨那个可爱的MM。 在不知道第几遍的时候,小姐终于受不了了来了句:“你妈B上为什么挂铃铛啊?”然后挂了!!
  
  目的达成!!!记下工号。然后一个电话继续过去,用很认真很严肃的口气对那个小姐说:“我是这个号码的主人,刚刚朋友在用我的手机,我刚才从朋友那里接过电话后就听到你说,你妈B上为什么挂铃铛啊?这是怎么回事?我要投诉你!!你的工号是XXXX吧?”   
  那边立刻郁闷了,然后说:先生,对不起,我是被骚扰后才这么说的,对不起。实在是对不起。请您原谅。(MM带着哭腔说的,估计已经快疯了)
  我们这边:哦,那就算啦。哈哈哈哈哈哈。。。。。   
  挂断~~~然后用此方法试了无锡,镇江(无人接听),扬州,常州,南京.......小姐无一例外的崩溃了~~~~~
  
   事先声明,不是我做的,是我们宿舍那群禽兽干的~~~~

posted @ 2009-02-02 23:20 山虎 阅读(40) | 评论 (0)编辑

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

与我联系

搜索

 

常用链接

留言簿

随笔分类

随笔档案

文章分类

最新评论

阅读排行榜

评论排行榜