GetRows方法获取记录集数据时,你可以将ADODB.RecordSet对象转换为一个二维数组。以下是具体示例和说明:
<%@ 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>");
}
}
%>
<%
// 只获取前10行
var data = rs.GetRows(10);
// 从第5行开始获取10行(需要先设置游标类型)
rs.CursorLocation = 3; // adUseClient
var data = rs.GetRows(10, 5);
%>
<%
// 只获取特定字段
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);
%>
<%
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);
}
%>
<%
// 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());
}
}
%>
<%
// 批量处理大量数据
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++) {
// 处理每一行数据
}
}
%>
data[column][row],先列后行
释放资源:使用后及时关闭记录集和连接
错误处理:始终包含错误处理代码
数据类型:JScript中所有值都是Variant类型
这样可以高效地将Recordset数据转换为数组进行处理,特别适合需要快速读取和操作数据的场景。