滨州市文章资讯

asp中在JScript中使用RecordSet对象的GetRows

2026-04-01 18:51:04 浏览次数:0
详细信息

GetRows方法获取记录集数据时,你可以将ADODB.RecordSet对象转换为一个二维数组。以下是具体示例和说明:

1. 基础使用示例

<%@ Language=JScript %>
<%
// 创建连接和记录集
var conn = Server.CreateObject("ADODB.Connection");
var rs = Server.CreateObject("ADODB.Recordset");

// 连接数据库(示例使用Access)
conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("db.mdb"));

// 执行查询
rs.Open("SELECT id, name, email FROM users", conn);

// 使用GetRows获取数据
var data = rs.GetRows();

// 关闭连接
rs.Close();
conn.Close();

// 处理数据
if (data != null) {
    // data[0] 包含第一列(id)的所有值
    // data[1] 包含第二列(name)的所有值
    // data[2] 包含第三列(email)的所有值

    var rowCount = data[0].length; // 获取行数
    var colCount = data.length;    // 获取列数

    for (var i = 0; i < rowCount; i++) {
        Response.Write("ID: " + data[0][i] + "<br>");
        Response.Write("Name: " + data[1][i] + "<br>");
        Response.Write("Email: " + data[2][i] + "<br><br>");
    }
}
%>

2. 指定返回行数

<%
// 只获取前10行
var data = rs.GetRows(10);

// 从第5行开始获取10行(需要先设置游标类型)
rs.CursorLocation = 3; // adUseClient
var data = rs.GetRows(10, 5);
%>

3. 指定字段

<%
// 只获取特定字段
var fields = new Array(0, 2); // 获取第1列和第3列
var data = rs.GetRows(-1, 0, fields);

// 或使用字段名
var fields = new Array("id", "email");
var data = rs.GetRows(-1, 0, fields);
%>

4. 实用封装函数

<%
function RecordsetToArray(rs) {
    if (rs.EOF || rs.BOF) {
        return null;
    }

    var data = rs.GetRows();
    var result = new Array();

    // 转换为对象数组(更易读)
    var fields = new Array();
    for (var i = 0; i < rs.Fields.Count; i++) {
        fields.push(rs.Fields(i).Name);
    }

    for (var row = 0; row < data[0].length; row++) {
        var obj = new Object();
        for (var col = 0; col < fields.length; col++) {
            obj[fields[col]] = data[col][row];
        }
        result.push(obj);
    }

    return result;
}

// 使用示例
var rs = conn.Execute("SELECT * FROM products");
var products = RecordsetToArray(rs);

for (var i = 0; i < products.length; i++) {
    Response.Write(products[i].ProductName + ": $" + products[i].Price);
}
%>

5. 注意事项

<%
// 1. GetRows后记录集位置会改变
rs.MoveFirst(); // 如果需要重新遍历,先重置位置

// 2. 处理空记录集
if (!rs.EOF) {
    var data = rs.GetRows();
} else {
    Response.Write("没有数据");
}

// 3. 内存管理 - 处理大数据集
var maxRows = 1000;
var data = rs.GetRows(maxRows); // 限制返回行数

// 4. 字段类型处理
var data = rs.GetRows();
for (var i = 0; i < data[0].length; i++) {
    // 检查是否为日期类型
    if (data[2][i] instanceof Date) {
        Response.Write(data[2][i].toLocaleDateString());
    }
}
%>

6. 性能优化示例

<%
// 批量处理大量数据
var batchSize = 500;
do {
    var data = rs.GetRows(batchSize);

    if (data != null && data[0].length > 0) {
        ProcessBatch(data); // 自定义处理函数
    }

} while (!rs.EOF);

function ProcessBatch(data) {
    // 批量处理逻辑
    for (var i = 0; i < data[0].length; i++) {
        // 处理每一行数据
    }
}
%>

重要说明:

GetRows返回的数组结构data[column][row],先列后行 释放资源:使用后及时关闭记录集和连接 错误处理:始终包含错误处理代码 数据类型:JScript中所有值都是Variant类型

这样可以高效地将Recordset数据转换为数组进行处理,特别适合需要快速读取和操作数据的场景。

相关推荐