BCB 插入大量数据到数据库时出现程序崩溃

wushangjimo 2012-09-19 03:18:28
RT,数据量超过2w条时会有这种现象,直接死掉。每条记录插入的字段为38个。
执行步骤如下:
ADOQuery1->Close();
ADOQuery1->SQL->Text = "alter table "+Trim(ComboBox1->Text)+" add id counter ";
try{ADOQuery1->ExecSQL();}
catch(Exception& e){}
ADOQuery1->Close();
ADOQuery1->SQL->Text = "create index ss on "+Trim(ComboBox1->Text)+"(id) ";
try{ADOQuery1->ExecSQL();}
catch(Exception& e){}

ADOQuery1->Close();
ADOQuery1->SQL->Text = "select id from "+Trim(ComboBox1->Text);
try{ADOQuery1->Open();}
catch(Exception& e)
{ }
int recordCount = ADOQuery1->RecordCount;
ProgressBar1->Max = recordCount;

ADOQuery2->Close();
ADOQuery2->SQL->Text = "insert into dbo.NFavorites(userid,repid,cataid,inserttime,updatatime,seeable,dispOrder,doctypeNum,doctypeName,enterusername,checkusername,checkstate,checknote,"+tableStr+" fulltext,dxid,datatype,annexurl,imgurl,videourl,sufulltext) values(1,1,"+cataid+",'"+time+"','"+time+"',1,NULL,'"+num+"','"+name+"','"+user+"',NULL,'"+checkstate+"',NULL,"+valueStr+"'"+fulltext+"','"+dxid+"','0','"+annexurlVal+"','"+imgurlVal+"','"+videourlVal+"','"+sufulltextVal+"')" ;
try{ADOQuery2->ExecSQL();}

那个高手给指点一下,我都快疯了
...全文
226 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2012-09-20
  • 打赏
  • 举报
回复
问题是假死还是真死?
真死的话,你可以分段插入,先插1000条,等等再插剩下的。
僵哥 2012-09-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20061127/11/5187634.html
勉励前行 2012-09-19
  • 打赏
  • 举报
回复
你使用事务来插入大量的数据。速度会加快。因为大量数据提交时,服务器要做表扩张,如果硬盘稍差一些,速度跟不上,就异常了。用事务,则会先扩张表容量再插入数据,比较合理些。

dataxdata 2012-09-19
  • 打赏
  • 举报
回复
大量耗时的操作最好另外单开一下线程去处理
wkqzd 2012-09-19
  • 打赏
  • 举报
回复
换个思路,传SQL语句到数据库的存储过程,由存储过程处理试试。
缘中人 2012-09-19
  • 打赏
  • 举报
回复
循环中加这句,不知道会不会有作用
Application->ProcessMessages();
wushangjimo 2012-09-19
  • 打赏
  • 举报
回复
就开了一个线程,会有问题吗
ccrun.com 2012-09-19
  • 打赏
  • 举报
回复
考虑过多线程么?
wushangjimo 2012-09-19
  • 打赏
  • 举报
回复
我现在主要解决的就是程序死掉的问题,程序慢点儿也没关系。我测试了两天了,我用的数据在2W到12W之间的,有时候程序能顺利导入,有时候会到一半的时候死掉
ccrun.com 2012-09-19
  • 打赏
  • 举报
回复
可以考虑先插入数据,最后再建索引。

Bulk Insert虽然速度快,但有个缺点,装载的文件必须是服务器能够直接访问到。
缘中人 2012-09-19
  • 打赏
  • 举报
回复
缘中人 2012-09-19
  • 打赏
  • 举报
回复
sql server数据库?
连续循环插入2w条记录?
你可以先生成Text文件是以逗号将每列分开的一列一行纯文本文件。

bulk insert dbo.Simple from 'C:"data.txt' with(fieldterminator=',', rowterminator='"n')

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧