数据库是:SQL Server 连接方式是:ADO
程序里就是读一行数据然后insert到数据库里。应该不是读文本文件导致程序死掉。应该是做了2万多个insert后,程序死掉了。在调试状态下,会有一个连接超时的错误。如何解决这个问题?
22 个解决方案
#1
建议使用bcp,这方面的帖子很多,搜索一下吧。
#2
学习,没有加过这么多!
#3
好办,你在导入时加一个进度条显示导入进度就行了吧
#4
楼上说的什么意思?
我的问题是大量的操作数据库导致程序无响应(不过有时候插入4万条都没问题,只是慢了一点,而有时候指插入2万多行就无响应了了)。
ljianq:
bcp?我查查
我的问题是大量的操作数据库导致程序无响应(不过有时候插入4万条都没问题,只是慢了一点,而有时候指插入2万多行就无响应了了)。
ljianq:
bcp?我查查
#5
插1000条就重新断开、重连接一次试试
#6
为什么不用缓存更新呢?先写入到内存里,再一次性写入多条记录。这样可以少用几次insert操作,即可写入所有数据。
#7
同意 ljianq(泉深水清)
或者
设置SQL Server 及客户端的超时时间。
具体去SQL Server版块查。
或者
设置SQL Server 及客户端的超时时间。
具体去SQL Server版块查。
#8
不过bcp唯一麻烦的就是必须要至少安装一个Sql server客户端
#9
我以前也遇到此类情况,需要一批将16个原始文件(每个文件处理后大约有5万多条记录),
处理后加入数据库
在INSERT数据时在128M内存,C533的机器上会出现几分钟的程序不反应,直到处理完为止。
后来实际用时换了P4 512M的工控机,
预处理原始文件后,存入有5万条记录的数组中,然后再提交数据库,
虽然还有迟钝,但比程序不反应强多了。
另外:如果数据库量比较大的话,最好按周或月分不同的表
处理后加入数据库
在INSERT数据时在128M内存,C533的机器上会出现几分钟的程序不反应,直到处理完为止。
后来实际用时换了P4 512M的工控机,
预处理原始文件后,存入有5万条记录的数组中,然后再提交数据库,
虽然还有迟钝,但比程序不反应强多了。
另外:如果数据库量比较大的话,最好按周或月分不同的表
#10
如果是这样的话,可以尝试分段操作,提交到一定数量的记录时,中断连接,然后再连接数据库,再继续,应该可以解决这个问题,或者把文本文件拆分成小文件.
#11
bcp是什么?
galaxyseeker(星空):如何用缓存减少insert的次数?即使在缓存里,一条纪录也得insert一次呀?
现在发现不是程序死掉,只是在任务管理器里进程是"未响应"的状态,实际上程序在不停的忘数据库insert纪录,直至程序正常结束。
galaxyseeker(星空):如何用缓存减少insert的次数?即使在缓存里,一条纪录也得insert一次呀?
现在发现不是程序死掉,只是在任务管理器里进程是"未响应"的状态,实际上程序在不停的忘数据库insert纪录,直至程序正常结束。
#12
我是要查询好几十万条记录,然后向listView里写入,更慢,愁
#13
cuiyu616ok(大宇) :
你是说你查询的结果有10几万条吧?但是你每次显示只要几十条就行了,你可以想办法每次只查出需要显示的纪录,用户“上一页”“下一页“是你在查出对应的纪录。
各位关注一下我的问题如何解决?
你是说你查询的结果有10几万条吧?但是你每次显示只要几十条就行了,你可以想办法每次只查出需要显示的纪录,用户“上一页”“下一页“是你在查出对应的纪录。
各位关注一下我的问题如何解决?
#14
commandtimeout设置为0试试
#15
学习,没有加过这么多!
我一直以为"未响应"的状态,就是程序死了呢.
我一直以为"未响应"的状态,就是程序死了呢.
#16
同意 wxcwuxuchun(清风) 的观点:
如果是这样的话,可以尝试分段操作,提交到一定数量的记录时,中断连接,然后再连接数据库,再继续,应该可以解决这个问题,或者把文本文件拆分成小文件.
但是有个问题,如果只是执行一条sql语句,这条语句的量很大,该怎么分段呢?
如果是这样的话,可以尝试分段操作,提交到一定数量的记录时,中断连接,然后再连接数据库,再继续,应该可以解决这个问题,或者把文本文件拆分成小文件.
但是有个问题,如果只是执行一条sql语句,这条语句的量很大,该怎么分段呢?
#17
application->processmessage();
#18
----回复人: zhaowd() ( ) 信誉:99
先尽可能的对语句进行效率优化,
然后实在不行了 只能给用户提供个状态进程显示了。。。让他们慢慢等吧。
//或者是采取措施避免用户这样大数据量的查询,限制一下。
先尽可能的对语句进行效率优化,
然后实在不行了 只能给用户提供个状态进程显示了。。。让他们慢慢等吧。
//或者是采取措施避免用户这样大数据量的查询,限制一下。
#19
我的问题用 BCBX(曾牧暗鲨_在深圳漂)的办法可以解决。
application->processmessage();
各位提的其它的方法对减轻数据库的压力都是好办法哦!
application->processmessage();
各位提的其它的方法对减轻数据库的压力都是好办法哦!
#20
用线程可以么?
#21
才2 万就挂了,SQL Server不会这么脆弱,可能是程序的问题
#22
Application->ProcessMessages();
if(Stop)
break;
在form上设置一个按钮,定为中断,把这条语句加到循环中,然后按中断即可中断你的操作了。
if(Stop)
break;
在form上设置一个按钮,定为中断,把这条语句加到循环中,然后按中断即可中断你的操作了。
#1
建议使用bcp,这方面的帖子很多,搜索一下吧。
#2
学习,没有加过这么多!
#3
好办,你在导入时加一个进度条显示导入进度就行了吧
#4
楼上说的什么意思?
我的问题是大量的操作数据库导致程序无响应(不过有时候插入4万条都没问题,只是慢了一点,而有时候指插入2万多行就无响应了了)。
ljianq:
bcp?我查查
我的问题是大量的操作数据库导致程序无响应(不过有时候插入4万条都没问题,只是慢了一点,而有时候指插入2万多行就无响应了了)。
ljianq:
bcp?我查查
#5
插1000条就重新断开、重连接一次试试
#6
为什么不用缓存更新呢?先写入到内存里,再一次性写入多条记录。这样可以少用几次insert操作,即可写入所有数据。
#7
同意 ljianq(泉深水清)
或者
设置SQL Server 及客户端的超时时间。
具体去SQL Server版块查。
或者
设置SQL Server 及客户端的超时时间。
具体去SQL Server版块查。
#8
不过bcp唯一麻烦的就是必须要至少安装一个Sql server客户端
#9
我以前也遇到此类情况,需要一批将16个原始文件(每个文件处理后大约有5万多条记录),
处理后加入数据库
在INSERT数据时在128M内存,C533的机器上会出现几分钟的程序不反应,直到处理完为止。
后来实际用时换了P4 512M的工控机,
预处理原始文件后,存入有5万条记录的数组中,然后再提交数据库,
虽然还有迟钝,但比程序不反应强多了。
另外:如果数据库量比较大的话,最好按周或月分不同的表
处理后加入数据库
在INSERT数据时在128M内存,C533的机器上会出现几分钟的程序不反应,直到处理完为止。
后来实际用时换了P4 512M的工控机,
预处理原始文件后,存入有5万条记录的数组中,然后再提交数据库,
虽然还有迟钝,但比程序不反应强多了。
另外:如果数据库量比较大的话,最好按周或月分不同的表
#10
如果是这样的话,可以尝试分段操作,提交到一定数量的记录时,中断连接,然后再连接数据库,再继续,应该可以解决这个问题,或者把文本文件拆分成小文件.
#11
bcp是什么?
galaxyseeker(星空):如何用缓存减少insert的次数?即使在缓存里,一条纪录也得insert一次呀?
现在发现不是程序死掉,只是在任务管理器里进程是"未响应"的状态,实际上程序在不停的忘数据库insert纪录,直至程序正常结束。
galaxyseeker(星空):如何用缓存减少insert的次数?即使在缓存里,一条纪录也得insert一次呀?
现在发现不是程序死掉,只是在任务管理器里进程是"未响应"的状态,实际上程序在不停的忘数据库insert纪录,直至程序正常结束。
#12
我是要查询好几十万条记录,然后向listView里写入,更慢,愁
#13
cuiyu616ok(大宇) :
你是说你查询的结果有10几万条吧?但是你每次显示只要几十条就行了,你可以想办法每次只查出需要显示的纪录,用户“上一页”“下一页“是你在查出对应的纪录。
各位关注一下我的问题如何解决?
你是说你查询的结果有10几万条吧?但是你每次显示只要几十条就行了,你可以想办法每次只查出需要显示的纪录,用户“上一页”“下一页“是你在查出对应的纪录。
各位关注一下我的问题如何解决?
#14
commandtimeout设置为0试试
#15
学习,没有加过这么多!
我一直以为"未响应"的状态,就是程序死了呢.
我一直以为"未响应"的状态,就是程序死了呢.
#16
同意 wxcwuxuchun(清风) 的观点:
如果是这样的话,可以尝试分段操作,提交到一定数量的记录时,中断连接,然后再连接数据库,再继续,应该可以解决这个问题,或者把文本文件拆分成小文件.
但是有个问题,如果只是执行一条sql语句,这条语句的量很大,该怎么分段呢?
如果是这样的话,可以尝试分段操作,提交到一定数量的记录时,中断连接,然后再连接数据库,再继续,应该可以解决这个问题,或者把文本文件拆分成小文件.
但是有个问题,如果只是执行一条sql语句,这条语句的量很大,该怎么分段呢?
#17
application->processmessage();
#18
----回复人: zhaowd() ( ) 信誉:99
先尽可能的对语句进行效率优化,
然后实在不行了 只能给用户提供个状态进程显示了。。。让他们慢慢等吧。
//或者是采取措施避免用户这样大数据量的查询,限制一下。
先尽可能的对语句进行效率优化,
然后实在不行了 只能给用户提供个状态进程显示了。。。让他们慢慢等吧。
//或者是采取措施避免用户这样大数据量的查询,限制一下。
#19
我的问题用 BCBX(曾牧暗鲨_在深圳漂)的办法可以解决。
application->processmessage();
各位提的其它的方法对减轻数据库的压力都是好办法哦!
application->processmessage();
各位提的其它的方法对减轻数据库的压力都是好办法哦!
#20
用线程可以么?
#21
才2 万就挂了,SQL Server不会这么脆弱,可能是程序的问题
#22
Application->ProcessMessages();
if(Stop)
break;
在form上设置一个按钮,定为中断,把这条语句加到循环中,然后按中断即可中断你的操作了。
if(Stop)
break;
在form上设置一个按钮,定为中断,把这条语句加到循环中,然后按中断即可中断你的操作了。