找回密码
 加入
搜索
查看: 1955|回复: 0

[效率算法] 如何快速读取 mssql 查询结果的记录,如10000条记录或更多?

[复制链接]
发表于 2013-9-2 13:45:56 | 显示全部楼层 |阅读模式
如何快速读取 mssql 查询结果的记录,如10000条记录或更多?

用下面这个函数读取SQL的结果太慢,有什么更好的办法?


$Err = ObjEvent("AutoIt.Error", "ODBCJET_ErroHandler") ;定义一个函数ODBCJET_ErroHandler收集对象的错误

Dim $sServer = '127.0.0.1', $sUsername = 'sa', $sPassword = '1234567' ;三个变量分别是连接数据库用的地址、账号、密码
$Conn = ObjCreate("ADODB.Connection");首先要建立ADODB.Connection类
$Conn.open("DRIVER={SQL Server};SERVER=" & $sServer & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";");使用open方法连接数据库
If @error Then Exit
;如果程序没有退出,说明成功连接上了数据库

;连接成功后我们来读取数据
$Conn.Execute("use master") ;首先要指定一个需要操作的库,这里用系统自带的master库来操作
$RS = ObjCreate("ADODB.Recordset");创建记录集对象
$RS.ActiveConnection = $conn;设置记录集的激活链接属性来自$Conn
$RS.Open("Select * from sysdatabases ORDER BY Name");执行Sql语句,这个语句是查询数据库中所有的库属性,并且按Name字段的数据进行排序
Dim $Select_Db[1][1] = [[0]];定义一个数组来接收查询到的数据
Dim $Count = 1;定义一个变量用来记录查询到的数据行数
While Not $RS.eof And Not $RS.bof;当记录指针处于第一条记录和最后一条记录之间时,执行while循环
        If @error = 1 Then ExitLoop
        If $Select_Db[0][0] = 0 Then;当数组二维$Select_Db[0][0]为0时,重定义数组的第二维大小等于记录集查询到的字段数
                ReDim $Select_Db[1][$RS.Fields.Count + 1];$RS.Fields.Count为记录集查询到的字段数
                For $i = 0 To $RS.Fields.Count - 1
                        $Select_Db[0][$i + 1] = $RS.Fields($i).Name;$RS.Fields($i).Name为字段名,把字段名存入数组
                Next
        EndIf
        ReDim $Select_Db[$Count + 1][$RS.Fields.Count + 1];数组第一维大小加1,用于存放数据
        $Select_Db[0][0] = $Count;$Select_Db[0][0]存放查询到的数据行数
        For $i = 0 To $RS.Fields.Count - 1
                $Select_Db[$Count][$i + 1] = $RS.Fields($i).Value;$RS.Fields($i).Value字段数据
        Next
        $Count += 1;行数加1
        $RS.movenext;将记录指针从当前的位置向下移一行
WEnd
$RS.Close;关闭记录集对象
_ArrayDisplay($Select_Db, "数据库所有库属性");显示数组
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-3 20:52 , Processed in 0.077770 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表