社区
数据库
帖子详情
求救?!!使用ADO来遍历数据库的时候在100万条记录正常,但200万以上总是失败!
kxcc_sx
2003-07-02 12:12:26
我用ADO+VC做了一个系统,需要将表中所有记录写成文件!所以用SELECT * FORM
得到recordset进行处理但我发现当记录数很巨大时!等待很慢!但还可以用但超过200万
条数据后就catch到错误!数据库连接不上!我该怎么办!是不是要设置某些参数,还望高手指点一二!
...全文
70
12
打赏
收藏
求救?!!使用ADO来遍历数据库的时候在100万条记录正常,但200万以上总是失败!
我用ADO+VC做了一个系统,需要将表中所有记录写成文件!所以用SELECT * FORM 得到recordset进行处理但我发现当记录数很巨大时!等待很慢!但还可以用但超过200万 条数据后就catch到错误!数据库连接不上!我该怎么办!是不是要设置某些参数,还望高手指点一二!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kxcc_sx
2003-07-15
打赏
举报
回复
最后问题还是没有解决不过还是谢谢大家的热心帮助!
kxcc_sx
2003-07-08
打赏
举报
回复
m_pRecordset->CursorLocation = adUseServer
我的是在服务器端运行!
CharmDream
2003-07-05
打赏
举报
回复
你是在服务器端,还是在客户端打开记录集
m_pRecordset->CursorLocation = adUseClient;
m_pRecordset->CursorLocation = adUseServer;
前者纪录在服务器缓存,后者在客户机缓存
对于数据量比较大的记录集
通常不一次就缓存所有数据,而是设置一个CacheSize
每次取n个,分页进行
kxcc_sx
2003-07-03
打赏
举报
回复
好的我把它贴出来!!!
//对数据库进行操作
CString sqlStr;
char *p;
_RecordsetPtr m_pRecordset;
_variant_t RecordsAffected;
_variant_t vIndex ;
_variant_t temp_var;
_bstr_t temp_str;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
//校验invoice_index的数据
sqlStr.Format("SELECT * FROM INVOICE_INDEX WHERE TABLE_NAME='%s'",tablename);
m_pRecordset->Open((_bstr_t)sqlStr,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
m_pRecordset->Close();
AfxMessageBox("找不到该条记录!");
g_CheckOK=-1;
_endthread();
return;
}
else
{
//serial_begin
vIndex=(long)2;
temp_str=m_pRecordset->GetCollect(vIndex);
p=_com_util::ConvertBSTRToString(temp_str);
serial_begin=p;
delete p;
//data_num
vIndex=(long)4;
temp_var=m_pRecordset->GetCollect(vIndex);
data_num=(long)temp_var;
//data_time
vIndex=(long)5;
temp_var=m_pRecordset->GetCollect(vIndex);
data_time=(COleDateTime)temp_var;
//data_t=(COleDateTime)temp_var;
data_strTime=data_time.Format("%Y-%m-%d %H:%M:%S");
//data_key
vIndex=(long)9;
temp_str=m_pRecordset->GetCollect(vIndex);
p=_com_util::ConvertBSTRToString(temp_str);
data_key=p;
delete p;
//data_mac
vIndex=(long)10;
temp_str=m_pRecordset->GetCollect(vIndex);
p=_com_util::ConvertBSTRToString(temp_str);
data_mac=p;
delete p;
//TRACE("serial_begin=%s\n",serial_begin);
//TRACE("data_key=%s\n",data_key);
//TRACE("data_num=%d\n",data_num);
//TRACE("data_strTime=%s\n",data_strTime);
//TRACE("data_mac=%s\n",data_mac);
m_pRecordset->Close();
//获得数据密钥
//先解码
memset(encdeckey,0,128);
memcpy(encdeckey,data_key,128);
memset(deckey,0,128);
rv = INFO_Base64Decode(encdeckey,deckey,&deckeylen);
if (rv != 0)
{
g_CheckOK=-1;
_endthread();
return;
}
//TRACE("deckey=%s\n",deckey);
memset(key,0,128);
rv = INFO_Decrypt((char*)backupkey,CGetLength(backupkey),(char*)deckey,deckeylen,(char*)key,&keylen,3);
if (rv != 0)
{
g_CheckOK=-1;
_endthread();
return;
}
//TRACE("key=%s\n",key);
//对mac进行校验
//生成校验码
memset(macStr,0,128);
memset(mac,0,128);
memset(pemMac,0,128);
wsprintf((char *)macStr,"%s,%s,%s",serial_begin,key,data_strTime);
//TRACE("macStr=%s\n",macStr);
//对MAC数据校验码进行摘要
rv = INFO_GenerateMac((char*)key,CGetLength(key),(char*)macStr,CGetLength(macStr),mac,&encDataLen,11);
if (rv != 0)
{
printf("INFO_Encrypt error ....");
g_CheckOK=-1;
_endthread();
return ;
}
rv = INFO_Base64Encode((unsigned char*)mac,encDataLen,(char*)pemMac);
if (rv != 0)
{
printf("INFO_Base64Encode error ....");
g_CheckOK=-1;
_endthread();
return ;
}
//TRACE("pemMac=%s\n",pemMac);
if (pemMac!=data_mac)
{
AfxMessageBox("invoice_index校验失败!");
g_CheckOK=-1;
_endthread();
return;
}
else
{
//AfxMessageBox("invoice_index校验成功!");
//以下校验发票数据
sqlStr.Format("SELECT * FROM INVOICE_%s ORDER BY INVOICE_SN ",postfixname);
//TRACE("sqlStr=%s\n",sqlStr);
m_pRecordset->Open((_bstr_t)sqlStr,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
m_pRecordset->Close();
AfxMessageBox("找不到该条记录!");
g_CheckOK=-1;
_endthread();
return;
}
else
{
m_pRecordset->MoveFirst();
//发票密码
CString sn;
CString invoice_pass;
char pemdecPass[128];
unsigned char decPass[128];
unsigned long decPasslen;
char password[128];
int passwordlen;
g_CheckNum=0;
while (!m_pRecordset->adoEOF)
{
vIndex=(long)2;
temp_str=m_pRecordset->GetCollect(vIndex);
//sn
p=_com_util::ConvertBSTRToString(temp_str);
sn=p;
delete p;
vIndex=(long)3;
temp_str=m_pRecordset->GetCollect(vIndex);
//invoice_pass
p=_com_util::ConvertBSTRToString(temp_str);
invoice_pass=p;
delete p;
//data_mac
vIndex=(long)6;
temp_str=m_pRecordset->GetCollect(vIndex);
p=_com_util::ConvertBSTRToString(temp_str);
data_mac=p;
delete p;
//TRACE("sn=%s\n",sn);
//TRACE("invoice_pass=%s\n",invoice_pass);
//TRACE("data_mac=%s\n",data_mac);
//对发票密码进行解码
memset(pemdecPass,0,128);
memcpy(pemdecPass,invoice_pass,128);
memset(decPass,0,128);
rv = INFO_Base64Decode(pemdecPass,decPass,&decPasslen);
if (rv != 0)
{
g_CheckOK=-1;
m_pRecordset->Close();
_endthread();
return;
}
memset(password,0,128);
rv = INFO_Decrypt((char*)key,CGetLength(key),(char*)decPass,decPasslen,(char*)password,&passwordlen,3);
if (rv != 0)
{
g_CheckOK=-1;
m_pRecordset->Close();
_endthread();
return;
}
//TRACE("password=%s\n",password);
//生成校验码
memset(macStr,0,128);
memset(mac,0,128);
memset(pemMac,0,128);
wsprintf((char *)macStr,"%s,%s,%d",sn,password,0);
//TRACE("macStr=%s\n",macStr);
//对MAC数据校验码进行摘要
rv = INFO_GenerateMac((char*)key,CGetLength(key),(char*)macStr,CGetLength(macStr),mac,&encDataLen,11);
if (rv != 0)
{
printf("INFO_Encrypt error ....");
g_CheckOK=-1;
m_pRecordset->Close();
_endthread();
return ;
}
rv = INFO_Base64Encode((unsigned char*)mac,encDataLen,(char*)pemMac);
if (rv != 0)
{
printf("INFO_Base64Encode error ....");
g_CheckOK=-1;
m_pRecordset->Close();
_endthread();
return ;
}
//TRACE("pemMac=%s\n",pemMac);
if (pemMac!=data_mac)
{
g_CheckOK=-1;
m_pRecordset->Close();
AfxMessageBox("数据校验失败!");
//_endthread();
return;
}
g_CheckOK++;
g_CheckNum++;
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
}
}
}
_endthread();
}//try
catch(_com_error e)///捕捉异常
{
AfxMessageBox("读取数据库失败!CHECKOUT");///显示错误信息
_endthread();
}
_endthread();
return;
BuZhang_AP97091
2003-07-03
打赏
举报
回复
我建议改造数据库
怎么会把这么多记录放在一张表里
xlander
2003-07-03
打赏
举报
回复
不会吧,贴代码看看
我做个一个480万多的,没有出现异常啊
kxcc_sx
2003-07-02
打赏
举报
回复
好的谢谢 jnxulei(石头)
vclzy
2003-07-02
打赏
举报
回复
网络速度慢了
丁淇石头
2003-07-02
打赏
举报
回复
可能需要设置数据库的timeout等参数的值,你应该到相应的数据库版去问一下,SQL SERVER版的高手很多,也很热情。
zyleon
2003-07-02
打赏
举报
回复
up
henryzc
2003-07-02
打赏
举报
回复
gz
xmzhy
2003-07-02
打赏
举报
回复
关注!
我在CSDN参与的3000个帖子
2:
100
分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望高手帮忙! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,...
基于VC++的门禁管理上位机系统设计与实现
本文围绕基于VC++开发的门禁管理上位机展开,介绍其在用户管理、时间段设置、访客授权、数据
记录
、报警联动等方面的功能实现。通过MFC框架构建图形界面,结合Win32 API进行设备通信,并利用
ADO
/ODBC连接
数据库
,实现...
CSDN回帖得分大全(近两年)
√vs
200
5调用dll的时候Initialize()函数返回错误 [VC/MFC 基础类] 40 ylongwu 05-21 20:486 ylongwu06-28 13:42管理√为什么我创建登陆框之后,然后获取登陆框的数据时候
总是
... [VC/MFC 基础类]
100
wysbk002 05-22
WEB开发文档2 总结
http://blog.donews.com/lvjiyong/archive/
200
6/06/29/931071.aspx 怎样将后台生成的在内存中的图象显示到客户端 Microsoft IE WebControls下载地址 如何在DATAGRID中
使用
JAVASCRIPT脚本控制 DataGrid中连接到...
C++笔试题目大全
1 c++ c++ c++ c++ 笔试题汇总 ...最容易想到的方法
遍历
一遍链表,利用一个辅助指针,存储
遍历
过程中当前指针指向的下一个 元 素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍
数据库
4,017
社区成员
39,806
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章