分类: 沉思录

  • GetRows() 提取大批量数据

    现有10W条数据,Access数据库保存

    通过正常提取:
     程序代码
    <%
    Set conn= Server.CreateObject("ADODB.Connection")
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb")
    conn.Open connstr

    Set rs = Server.CreateObject ("ADODB.Recordset")
    sql = "Select * from people order by id desc"
    rs.Open sql,conn,1,1

    Do While Not rs.EOF
        Response.write rs("id")&" | "
        rs.MoveNext
    Loop
    %>

    http://myhhe.cn/test/getrows/show1.asp 
    耗时3,250.000毫秒,总测试平均值在3秒左右

    使用存储过程提取:
     程序代码
    <%
    Set conn = Server.CreateObject("ADODB.Connection")
    Set cmd = Server.CreateObject("ADODB.Command")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")

    cmd.ActiveConnection = conn
    cmd.CommandText = "Select * from people order by id desc"
    Set rs = cmd.Execute

    Do While Not rs.EOF
    Response.write rs("id")&" | "
    rs.MoveNext
    Loop
    %>

    http://myhhe.cn/test/getrows/show2.asp 
    耗时2,187.500毫秒,总测试平均值在2秒左右

    以上两种均不能彻底解决执行时间漫长的问题,主要原因即是循环每次都须向数据库抽取记录(Command速度相对较快)

    那么使用GetRows()方法呢:
     程序代码
    <%
    Set conn = Server.CreateObject("ADODB.Connection")
    Set cmd = Server.CreateObject("ADODB.Command")

    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")
    cmd.ActiveConnection = conn
    cmd.CommandText = "Select * from people order by id desc"
    Set rs = cmd.Execute
    rsArray = rs.GetRows()

    For i = 0 To UBound(rsArray, 2)
    Response.Write rsArray(0, i)&" | "
    Next
    %>

    http://myhhe.cn/test/getrows/show3.asp 
    耗时187.500毫秒,总测试平均值在0.2秒左右

    GetRows()方法是将数据从 Recordset 复制到二维数组中,这是一个二维数组,第一个下标标识字段,第二个则标识记录号

    所以rsArray = rs.GetRows()
    rsArray(0, 0)就表示记录集第一行的第一字段值
    rsArray(1, 0)就表示记录集第一行的第二字段值

    数组的数据是保存在内存中的,这就从根本上解决了每次显示记录还需向数据库请求的麻烦。

    另外,关于GetRows()的详细介绍和用法,这里有份内容参考

    http://www.51windows.net/pages/Ado/mdmthgetrows.htm 

    http://www.blueidea.com/tech/program/2005/2853.asp

  • [ASP]GetRows的用法详解!

    大家应该都知道 Recordset 有个 GetRows 属性,但是真正使用的不多,我也是最近才用的!汗……

    其实这个属性很简单,就是把数据集输出到一个数组中。但是实用性可不小,在这里我举一个例子说明一下GetRows的使用方法,大家举一反三能想到更多的用法!

    比如一个分类的表 T_Cate,结构和数据如下:

    ID   |   Title   |  Intro
    —————————————–
    1    |   新闻   |  这里是新闻
    2    |   教程   |  这里是教程
    3    |   下载   |  这里是下载

    好了,表建立好了,数据也有了,下面我们就要用到GetRows咯! 

    Dim Rs_Cate
    Dim Arr_Cate
    Set Rs_Cate=Conn.ExeCute("SELECT ID,Title,Intro FROM T_Cate ORDER BY ID ASC")
    Arr_Cate=Rs_Cate.GetRows
    Set Rs_Cate=Nothing

    好了表数据已经导出到数组了!下面我们将遍历这个数组

    Dim Arr_CateNumS,Arr_CateNumI
    Arr_CateNumS=Ubound(Arr_Cate,2)  '得到数组中数据的下标
    For Arr_CateNumI=0 To Arr_CateNumS
        Response.Write("ID:"&Arr_Cate(0,Arr_CateNumI)&" | 标题:"&Arr_Cate(1,Arr_CateNumI)&" | 介绍:"&Arr_Cate(2,Arr_CateNumI)&"<br>")
    Next

    呵呵,好了,输出的数据为:
    ID:1 | 标题:新闻 | 介绍:这里是新闻
    ID:2 | 标题:教程 | 介绍:这里是教程
    ID:3 | 标题:下载 | 介绍:这里是下载

    好了,具体就写这么多吧!文采不行,如果大家有什么不明白的,多用用就可以了,呵呵

  • 一段经典的AJAX代码

    function posts(id){
        var xmlhttp;
        try{
            xmlhttp=new XMLHttpRequest();
            }
        catch(e){
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4){
            if (xmlhttp.status==200){
                var data=xmlhttp.responseText;

                result(data);    
                }
            else{
                //提交失败
                }
            }
        else{
            //提交中
            }
        }
        var BaseURL="text.asp"
        var url = BaseURL + "?timeStamp=" + new Date().getTime();
        xmlhttp.open("post", url, true);
        xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=gb2312');
        xmlhttp.send("id="+escape(id));    
    }
    function Colsid_result(data){
        
        var pronames
        var data_arr
        if(data!="0"){
            //信息返回成功,
            alert(data);
        }else{
            //信息返回为0
        }
    }

  • asp动态include文件

    受<! #include file="filename.asp" –> 宏限制 
    必须存在该文件并且会预先编译(不管前面是否加以条件) ,他总在运行ASP里的程序前先编译,所以无法用if XXX then <! #include file="filename.asp" –>  这种方法随意include文件了

    经常有这样的要求,根据不同的需求要求include不同的文件 
    如各个人的不同设置,所以要求能动态include文件。 
    这里的方法其实原理很简单,就是用FSO把文件读出来,然后 execute运行他,不过这却是很精典的代码了
    代码如下: 

     引用内容

    Function include(filename) 
    Dim re,content,fso,f,aspStart,aspEnd 

    set fso=CreateObject("Scripting.FileSystemObject") 
    set f=fso.OpenTextFile(server.mappath(filename)) 
    content=f.ReadAll 
    f.close 
    set f=nothing 
    set fso=nothing 

    set re=new RegExp 
    re.pattern="^s*=" 
    aspEnd=1 
    aspStart=inStr(aspEnd,content,"<%")+2 
    do while aspStart>aspEnd+1 
    Response.write Mid(content,aspEnd,aspStart-aspEnd-2) 
    aspEnd=inStr(aspStart,content,"%>")+2 
    Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write ")) 
    aspStart=inStr(aspEnd,content,"<%")+2 
    loop 
    Response.write Mid(content,aspEnd) 
    set re=nothing 
    End Function 

    使用范例: 
     引用内容
    include("youinc.asp")

  • 心是这个世界中最高贵的东西

    心是这个世界中最高贵的东西,
    为心而活的人,有几个呢?
    看到心珍爱心的人,又有几个呢?
    以一颗纯粹的心纯粹地生活着,
    是一种勇气,
    是一种智慧,
    更是一种幸福。

  • 不要那么多,只要一点点

    出门时,老是要铆足劲才能把门关严,
    每次都撞得门哐哐作响,
    有次正当我在使劲关门的时候,隔壁的门开了,
    只见邻居手里拿了一小块肥皂,在插销上涂抹了一下,
    然后轻轻一带门就关上了。

    厨房的水笼头颇高,洗菜什么的,老是四处溅出水来,
    恰好一次被好友看见,二次来的时候带来了一小截塑料管子套在了笼头上面,
    水流即刻就变得温顺起来,不再四处溅开。

    有时候,很多看似让我们头疼的事,其实我们只要做一点点改变,就可以解决,
    那当我们自己面对生活中的一难题和困惑的时候,
    是不是也可以做些小小的改变而使问题迎刃而解呢?
    只要找到问题的所在,相信不会是件难事。

    譬如上班经常迟到,究其原因是因为晚上睡得太晚的缘故,
    只要晚上提前点睡觉,就可以早早起床了。

    和家里关系僵,原因是在很多事情的上的观点不能统一,
    其实只要多站在他们的角度看想想,改变一下思维方式,
    就会发现沟通其实很容易。

    放眼于当我们觉得自己的生活工作不如所意的时候,
    就要静下来冷静思考下,是什么原因造成的,你期望的生活是什么样,
    离这样的生活还有多大的距离,自己要怎么做才尽量缩短之间的差距。
    找到问题的所在,并做一些相应的改变,
    你就会发现你就会离理想越来越近。

    很多时候,我们真的只需要一点点改变。

  • 涵养

    所谓涵养,并不是说吃饭的时候不能够把汤洒到桌上,而是当你发现别的人不小心把汤洒了之后,能够假装没有看到……

  • 在linux下挂载硬盘

    在这篇帖子里面主要将如何挂载硬盘,但是也将了一些挂载其他设备的方法,比如优盘等等……下面我们先来讨论一下硬盘。

    在我们使用其他分区的系统资源前,需要首先明白几个概念。linux下的分区表示。
    在linux下面,分区不再是c,d,e……而是使用了一种更加规范的表示方式。
    我们知道,通常情况下计算机里面可以容纳4个硬盘一般都是IDE设备而不是SCSI设备。如果是ide设备那么硬盘表示的起始就是hd,如果是scsi设备那么硬盘表示的起始就是sd。
    对于系统底层的识别是第一个ide接口的主设备,第一个ide接口的从设备,第二个ide接口的主设备,第二个点接口的从设备。他们分别表示为a,b,c,d。那么我们假设一个最常见的情况--我们使用ide的硬盘,那么表示就应该是hda,hdb,hdc,hdd。
    我们知道,在电脑里面可能有很多的分区,计算机的分区可以有主分区和逻辑分区。主分区在计算机里面只能有4个,二逻辑分区可以有很多个。(我好想记得是26个,不是很确定了,但是肯定是大于20的,呵呵很久没有看计算机基础了,很多都忘记了),通常我们一般使用数字来表示某一个分区。从1~N。但是我们在分区的时候很多时候只有一个主分区,那就是c盘,从d盘开始的其他盘符都是逻辑分区,那么用数字表示就是1,5,6~N。
    现在我们连接起来,加入我们的电脑的硬盘是计算机系统的第一个ide接口的主设备,系统里面有c,d,e,f,g几个盘符,那么现在他们在linux中表示为hda1,hda5,hda6,hda7,hda8,hda9。

    在我们了解了linux中的分区以后我们就可以开始挂载了,但是在挂载前,我们还有了解,linux本身是通过虚拟文件系统接口同其他文件系统通信,也就是说他本身可以支持多种文件系统。比如ext2,ext3,seap,fat,fat32,ntfs(只读而且需要内核支持),iso9660,……所谓的挂载,也就是将某个分区得我内容挂载到某个文件系统里面。比如,通常情况下在linux中有一个叫/mnt的文件系统,我们一般将光驱,软驱,usb设备等等都挂载到下面。注意,这只是一个习惯,并不是说一定要挂载到下面。你也可以在其他地方建立一个文件夹来挂载设备。

    好了,现在我们来了解如何挂载了。

    mount [-afFhnrvVm] [-|<标签>] [-o<选项>] [-t<文件系统>] [设备名称] [挂接点

    1、挂载硬盘分区
    比如我们要挂载e盘,现在我们(root用户哟~)就输入
    #mount /dev/hda5 /mnt/WinD
    其中/mnt下的WinD是你随意建立的文件夹。
    怎么样,是不是很简单,注意,使用完成后要输入
    #umount /dev/hda5或者
    #umount /mnt/WinD
    在挂载是你会发现你挂载以后如果那个分区里面有中文的文件夹或者文件名,你会发现他无法显示正常,呵呵,其实解决的办法很简单,就是挂载的时候加上参数。
    #mount -o iocharset=cp936 /dev/hda5 /mnt/WinD
    呵呵是不是就正常了!
    如果你想计算机每次开机自动挂载,那么请编辑/etc/fstab文件。将mount行添加进入。

    2、我们来说一下挂载软驱:
    先在/mnt下建立一个文件夹,比如叫foppy,现在插入软盘,在在命令提示符下输入
    #mount /dev/fd0 /mnt/foppy
    注意/dev/fd0是软驱的设备文件,你可以理解文驱动程序,呵呵~

    3、使用光驱
    比如你想将光驱挂载到/mnt/cdrom
    输入
    #mount /dev/cdrom /mnt/cdrom

    4、在linux中使用优盘
    在/mnt下建立一个文件加,比如叫usb
    输入:
    #mount /dev/sda1 /mnt/usb

    挂载的几点技巧补充:
    1、如果你不知道你的计算机的硬盘结构,请用管理员登陆,输入:
    #fdisk -l
    Disk /dev/hda: 255 heads, 63 sectors, 4865 cylinders
    Units = cylinders of 16065 * 512 bytes

    Device Boot Start End Blocks Id System
    /dev/hda1 1 386 3100513+ b Win95 FAT32
    /dev/hda5 389 399 88326 82 Linux swap
    /dev/hda6 1964 2491 4241128+ 83 Linux
    ……

    2、编辑/etc/fstab的结构
    比如想每次开机挂载E盘到/mnt/WinD
    请输入:
    /dev/hda6 /mnt/WinD rw,umask=0,iocharset=gb2312,codepage=936 0 0

    3、很多时候linux默认情况下是不能挂载NTFS文件系统的,这时候如果你要挂载请从新编译内核添加对NTFS的支持。