大侠:
我用vc ado智能指针 从数据库中读取数据,可是提取数据的速度太慢,如何能不用adorecordset的 movenext() 函数,实现一次取多条记录?
代码如下:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
// Note 1
inline void TESTHR( HRESULT _hr )
{ if FAILED(_hr) _com_issue_error(_hr); } typedef struct salary{
char name[20];
int salary;
};
void main(void)
{
CoInitialize(NULL);
try
{
_RecordsetPtr pRs("ADODB.Recordset");
_ConnectionPtr pCn("ADODB.Connection");
_variant_t var;
_bstr_t bstr;
vtCriteria;
long ix[1];
salary emSalary[100000] ;
pCn->Open("Provider=sqloledb;Data Source=192.168.10.10;"
"Initial Catalog=mydb;User Id=sa;Password=;",
strMissing, "",
adConnectUnspecified); char sqlstr[260] = "select name,salary from t_emploayee";
pRs.open(sqlstr,
_variant_t((IDispatch *) pCn, true),
adOpenDynamic,
adLockReadOnly,
adCmdText);
int i = 0;
while(!pRs.eof)
{
var = pRs.Fields->Item["name"]->Value;
bstr = var;
strcpy(emSalary[i].name,(LPCSTR)bstr);
var = pRs.Fields->Item["salary"]->Value;
bstr = var;
emSalaray[i].salary = (int)bstr;
pRs.MoveNext();////这里处理太慢
i++;
}
catch(_com_error e)
{
;/////////
}
CoUninitialize();}
我用vc ado智能指针 从数据库中读取数据,可是提取数据的速度太慢,如何能不用adorecordset的 movenext() 函数,实现一次取多条记录?
代码如下:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
// Note 1
inline void TESTHR( HRESULT _hr )
{ if FAILED(_hr) _com_issue_error(_hr); } typedef struct salary{
char name[20];
int salary;
};
void main(void)
{
CoInitialize(NULL);
try
{
_RecordsetPtr pRs("ADODB.Recordset");
_ConnectionPtr pCn("ADODB.Connection");
_variant_t var;
_bstr_t bstr;
vtCriteria;
long ix[1];
salary emSalary[100000] ;
pCn->Open("Provider=sqloledb;Data Source=192.168.10.10;"
"Initial Catalog=mydb;User Id=sa;Password=;",
strMissing, "",
adConnectUnspecified); char sqlstr[260] = "select name,salary from t_emploayee";
pRs.open(sqlstr,
_variant_t((IDispatch *) pCn, true),
adOpenDynamic,
adLockReadOnly,
adCmdText);
int i = 0;
while(!pRs.eof)
{
var = pRs.Fields->Item["name"]->Value;
bstr = var;
strcpy(emSalary[i].name,(LPCSTR)bstr);
var = pRs.Fields->Item["salary"]->Value;
bstr = var;
emSalaray[i].salary = (int)bstr;
pRs.MoveNext();////这里处理太慢
i++;
}
catch(_com_error e)
{
;/////////
}
CoUninitialize();}
解决方案 »
- opengl MFC下坐标关系
- 在VS.net2003 中怎么产生CDocTemplate类
- 请问哪位有在vc6下的用smtp发信的程序代码,要生成邮件信体部分(body)的,网上找的几个程序都明显不对,要能发附件的且有中文,望有的兄
- 如何才能让用户看不到我提供的类文件的源代码?
- SetFillMode(hdc,iMode);中的ALTERNATE方式的疑问
- 要学好图像处理和图形处理,应该先学好哪些数学知识
- 关于MSComm的问题
- 多线程串口通讯问题,请jjjtang(小桂子) 一定要进
- 为什么我用ADO更新数据库时 总是提示IDispatch error #3105 错误
- 求教关于DLL中调用对话框的问题:
- ado recordset open exception 问题
- 使用ado访问数据库出现的编译问题,比较着急,望各位能帮我解决
这样select查询的结果都被缓存的本地
读数据的时候,用top限制返回的结果,或者分页读取。这样能减少查旬的时间和数据传输得时间如果上面都可以解决,那么时间消耗,主要看你结果的数量也就是循环次数,movenext其实消耗不了多少,主要是循环的次数,这个次数依赖你select返回的结果数。你一次读取超过万条数据不限制,那么你得循环也会超过万次,怎么也快不起来的