6

我正在使用 QODBC 查询远程 MSSQL Server 数据库,并返回了一个结果集,但它看起来好像它为每条记录一个一个地向 SQL Server 发送查询。这对于迭代结果集来说真的很慢。从 Qt 运行查询,大约需要 15 秒才能完成。我在 SQL Server Management Studio 中运行了相同的查询,返回结果需要 1 秒。这是我正在使用的代码:

QString connectionTemplate = "DRIVER={SQL SERVER};SERVER=server;DATABASE=db;";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3", "db");
db.setDatabaseName(connectionTemplate);
db.setUserName("user");
db.setPassword("password");

if (db.open()) {
    qDebug() << "OK!";
    QSqlQuery * query = new QSqlQuery(db);
    query->exec("SELECT [UserName]"
                "  FROM [dbo].[Users]");


    while(query->next())
    {
        QString userName = query->value(0).toString();
        qDebug() << userName;
    }

    db.close();
}
else {
    qDebug() << db.lastError().text();
}

有没有办法将整个结果集捕获到内存中并在内存中循环遍历它?我宁愿不让应用程序花费这么长时间来遍历结果集。

4

1 回答 1

6

我想出了如何提高迭代结果的速度。我忘记了在执行之前我需要先准备好sql,并且setForwardOnly必须设置为true。

QSqlQuery * query = new QSqlQuery(db);
query->setForwardOnly(true);
query->exec("SELECT [UserName]"
            "  FROM [dbo].[Users]");
于 2013-07-16T12:46:40.787 回答