热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何提高ODBC一次连接多次查询的效率?

最近写个程序使用ODBC连接数据库,整个过程一次连接进行多次查询,每次查询一个语句就够了,但是查询的频繁,有的时候查询一条语句要用很久才会查询到,怎么才能够提高效率呢?另外连接后过很长时间不查
最近写个程序使用ODBC连接数据库,整个过程一次连接进行多次查询,每次查询一个语句就够了,但是查询的频繁,有的时候查询一条语句要用很久才会查询到,怎么才能够提高效率呢?

另外连接后过很长时间不查询(每次看到都是一夜12个小时左右),再进行查询时会产生10054错误,不知道是怎么回事?

20 个解决方案

#1


不懂帮顶

#2


引用楼主 tudoumayi 的回复:
最近写个程序使用ODBC连接数据库,整个过程一次连接进行多次查询,每次查询一个语句就够了,但是查询的频繁,有的时候查询一条语句要用很久才会查询到,怎么才能够提高效率呢?

另外连接后过很长时间不查询(每次看到都是一夜12个小时左右),再进行查询时会产生10054错误,不知道是怎么回事?

你用什么语言?
一般每个语言都有专用接口,实在不行了,才用odbc.

帮顶.

#3


是不是你没有写事务判断 没有释放掉内存??

#4


引用 3 楼 fredrickhu 的回复:
是不是你没有写事务判断 没有释放掉内存??

我不懂数据库不知道什么是事务判断呵呵。不过我的查询语句很简单,都是像“select userID form odb.UserList where username='zhangsan'”这样的。
所有的内存都是放了,如果让程序过一段时间就结束,经过检测没有内存泄漏。

#5


可能是sql语句的判断不正确,应该每次查询时,用一个sql语句,要做判断的啊,要不它会将所有sql语句都执行了的

#6


会不会是因为SQLServer使用了Keep-alive机制,过了两个小时把这个空闲的连接当成是死链接,然后把连接关闭了的原因呢?或者其他类似的什么原因?

#7


我一直都用ORACLE数据库

#8


我先把程序开开,等明天再查询一下报错了,截个图上了,请大家帮我分析分析。

#9


引用 2 楼 dawugui 的回复:
你用什么语言?
一般每个语言都有专用接口,实在不行了,才用odbc.

帮顶.

C++

#10


[img=http://photo.163.com/photo/weixingmayi/?u=weixingmayi#m=2&ai=193876090&pi=5634899672&p=1][/img]
错误是这样的。
过了一夜会这样,如果在短时间内不管多少次查询都没有问题。不知道为什么。

#11


先连上然后过一夜再查询?

#12


图片显示不出来写出来吧:
Execuate sql statement error
0099CDB0
10054
0099C810

错误显示的代码:
SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, theDiagState, &theNativeState, 
            (SQLWCHAR *) theMessageText, 100, &iOutputNo);
cout<<"Execuate sql statement error!"< cout< cout<

#13


引用 11 楼 guguda2008 的回复:
先连上然后过一夜再查询?
是啊。呵呵。

#14


引用 13 楼 tudoumayi 的回复:
引用 11 楼 guguda2008 的回复:
 先连上然后过一夜再查询?
是啊。呵呵。

多少用户?这样服务器能受的了吗?为啥不现用现连?

#15


过一点时间没操作的进程的确会被踢掉

#16


这个程序相当于服务器,会有很多的用户,但是对数据库查询使用的是一次连接多次查询的方式。

#17


引用 14 楼 guguda2008 的回复:
多少用户?这样服务器能受的了吗?为啥不现用现连?

主要是考虑到可能会有很多用户频繁的连接和退出这个程序,如果每次都连接和断开同数据库的连接的话会消耗的很多时间,所以就一次连接不断开连接了,现在是自己测试所以没有其他人连接,我不查询数据库就空闲了。
引用 15 楼 colacat911 的回复:
过一点时间没操作的进程的确会被踢掉

哦。如果是这样的话,我还得再考虑考虑怎么样进行数据库的链接了。
呵呵,那是不是过一段时间如果没有查询的话,先断开再连接就可以了?

#18


学习

#19


 CPTimeout 属性决定在连接池中的连接保留的时间长度。
如果在池中连接保留的时间比 CPTimeout 设置的时间长,则
连接将被关闭并且从池中删除。CPTimeout 的默认值是 60 秒。
    当然罗,可以通过创建如下设置的注册表键来设置 CPTimeout
的属性,从而启用特定 ODBC 数据库驱动程序的连接池:
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout
例如设置为100(单位为秒)
注意 默认情况下,通过将 CPTimeout 设置为 60 秒。


访问比较频繁的话,时间设的长一点。

#20


引用 19 楼 supan03 的回复:
CPTimeout 属性决定在连接池中的连接保留的时间长度。
如果在池中连接保留的时间比 CPTimeout 设置的时间长,则
连接将被关闭并且从池中删除。CPTimeout 的默认值是 60 秒。
    当然罗,可以通过创建如下设置的注册表键来设置 CPTimeout
的属性,从而启用特定 ODBC 数据库驱动程序的连接池:
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout
例如设置为100(单位为秒)
注意 默认情况下,通过将 CPTimeout 设置为 60 秒。


访问比较频繁的话,时间设的长一点。

哦,我试试看。谢谢了。

#21


  • Oracle 使用 with as 优化重复查询

推荐阅读
author-avatar
blue暗紫天堂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有