8 个解决方案
#1
确保100ms以内你的数据能完全插入进去?
#2
100ms时间够吧,只是简单地插入数据
wsprintf(sCmd,_T("insert into InfoDB values(%d,'%s','%s','%s','%s')"),info->iNo,info->sTitle,info->sSender,info->sTime,info->sText);
db.execDML(sCmd);//执行命令
当连续插入100条时不会出现这种错误,但是当插入500或1000时就会出现这种情况。
部分代码如下:
for(i=0;i<500;i++)//i<1000
{
k=i+1;
InfoList.iNo=k;
InfoDB.AddList(&InfoList);//执行插入数据命令函数,InfoList是存数据
Sleep(100);//休眠100ms
}
#3
你如果在循环开始之前,执行:
db.execDML("begin transaction");
循环结束之后,再执行:
db.execDML("commit")
就不会有问题了。
否则,每次执行insert,都隐含提交事务,频繁打开文件,速度会越来越慢。最后很可能就出错。
db.execDML("begin transaction");
循环结束之后,再执行:
db.execDML("commit")
就不会有问题了。
否则,每次执行insert,都隐含提交事务,频繁打开文件,速度会越来越慢。最后很可能就出错。
#4
使用事务没有,提交没有?
#5
是不是几个线程使用同一个handle在操作?搞个锁,其实即使单线程用下事务,那个性能也已经足够了。
#6
像这种大数据的插入最好开事务。
#7
我的数据库每70s左右插入一条记录,需要使用事务吗?
#8
http://topic.csdn.net/u/20100704/12/833a9b04-1a7e-478b-87c1-57543f029795.html
你可以参考下这个帖子。
你可以参考下这个帖子。
#1
确保100ms以内你的数据能完全插入进去?
#2
100ms时间够吧,只是简单地插入数据
wsprintf(sCmd,_T("insert into InfoDB values(%d,'%s','%s','%s','%s')"),info->iNo,info->sTitle,info->sSender,info->sTime,info->sText);
db.execDML(sCmd);//执行命令
当连续插入100条时不会出现这种错误,但是当插入500或1000时就会出现这种情况。
部分代码如下:
for(i=0;i<500;i++)//i<1000
{
k=i+1;
InfoList.iNo=k;
InfoDB.AddList(&InfoList);//执行插入数据命令函数,InfoList是存数据
Sleep(100);//休眠100ms
}
#3
你如果在循环开始之前,执行:
db.execDML("begin transaction");
循环结束之后,再执行:
db.execDML("commit")
就不会有问题了。
否则,每次执行insert,都隐含提交事务,频繁打开文件,速度会越来越慢。最后很可能就出错。
db.execDML("begin transaction");
循环结束之后,再执行:
db.execDML("commit")
就不会有问题了。
否则,每次执行insert,都隐含提交事务,频繁打开文件,速度会越来越慢。最后很可能就出错。
#4
使用事务没有,提交没有?
#5
是不是几个线程使用同一个handle在操作?搞个锁,其实即使单线程用下事务,那个性能也已经足够了。
#6
像这种大数据的插入最好开事务。
#7
我的数据库每70s左右插入一条记录,需要使用事务吗?
#8
http://topic.csdn.net/u/20100704/12/833a9b04-1a7e-478b-87c1-57543f029795.html
你可以参考下这个帖子。
你可以参考下这个帖子。