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

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

另外连接后过很长时间不查询(每次看到都是一夜12个小时左右),再进行查询时会产生10054错误,不知道是怎么回事?
...全文
265 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinsenhome 2009-12-28
  • 打赏
  • 举报
回复
学习
tudoumayi 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 guguda2008 的回复:]
多少用户?这样服务器能受的了吗?为啥不现用现连?
[/Quote]
主要是考虑到可能会有很多用户频繁的连接和退出这个程序,如果每次都连接和断开同数据库的连接的话会消耗的很多时间,所以就一次连接不断开连接了,现在是自己测试所以没有其他人连接,我不查询数据库就空闲了。
[Quote=引用 15 楼 colacat911 的回复:]
过一点时间没操作的进程的确会被踢掉
[/Quote]
哦。如果是这样的话,我还得再考虑考虑怎么样进行数据库的链接了。
呵呵,那是不是过一段时间如果没有查询的话,先断开再连接就可以了?
tudoumayi 2009-12-28
  • 打赏
  • 举报
回复
这个程序相当于服务器,会有很多的用户,但是对数据库查询使用的是一次连接多次查询的方式。
忆轩辕 2009-12-28
  • 打赏
  • 举报
回复
过一点时间没操作的进程的确会被踢掉
guguda2008 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 tudoumayi 的回复:]
引用 11 楼 guguda2008 的回复:
先连上然后过一夜再查询?
是啊。呵呵。
[/Quote]
多少用户?这样服务器能受的了吗?为啥不现用现连?
tudoumayi 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 guguda2008 的回复:]
先连上然后过一夜再查询?
[/Quote]是啊。呵呵。
tudoumayi 2009-12-28
  • 打赏
  • 举报
回复
图片显示不出来写出来吧:
Execuate sql statement error
0099CDB0
10054
0099C810

错误显示的代码:
SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, theDiagState, &theNativeState,
(SQLWCHAR *) theMessageText, 100, &iOutputNo);
cout<<"Execuate sql statement error!"<<endl;
cout<<theDiagState<<endl<<theNativeState<<endl;
cout<<theMessageText<<endl;
guguda2008 2009-12-28
  • 打赏
  • 举报
回复
先连上然后过一夜再查询?
tudoumayi 2009-12-28
  • 打赏
  • 举报
回复

错误是这样的。
过了一夜会这样,如果在短时间内不管多少次查询都没有问题。不知道为什么。
tudoumayi 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 supan03 的回复:]
CPTimeout 属性决定在连接池中的连接保留的时间长度。
如果在池中连接保留的时间比 CPTimeout 设置的时间长,则
连接将被关闭并且从池中删除。CPTimeout 的默认值是 60 秒。
    当然罗,可以通过创建如下设置的注册表键来设置 CPTimeout
的属性,从而启用特定 ODBC 数据库驱动程序的连接池:
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout
例如设置为100(单位为秒)
注意 默认情况下,通过将 CPTimeout 设置为 60 秒。


访问比较频繁的话,时间设的长一点。
[/Quote]
哦,我试试看。谢谢了。
马踏西风 2009-12-28
  • 打赏
  • 举报
回复
CPTimeout 属性决定在连接池中的连接保留的时间长度。
如果在池中连接保留的时间比 CPTimeout 设置的时间长,则
连接将被关闭并且从池中删除。CPTimeout 的默认值是 60 秒。
当然罗,可以通过创建如下设置的注册表键来设置 CPTimeout
的属性,从而启用特定 ODBC 数据库驱动程序的连接池:
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout
例如设置为100(单位为秒)
注意 默认情况下,通过将 CPTimeout 设置为 60 秒。


访问比较频繁的话,时间设的长一点。
tudoumayi 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
你用什么语言?
一般每个语言都有专用接口,实在不行了,才用odbc.

帮顶.
[/Quote]
C++
tudoumayi 2009-12-27
  • 打赏
  • 举报
回复
我先把程序开开,等明天再查询一下报错了,截个图上了,请大家帮我分析分析。
weiminyinhai 2009-12-27
  • 打赏
  • 举报
回复
我一直都用ORACLE数据库
tudoumayi 2009-12-27
  • 打赏
  • 举报
回复
会不会是因为SQLServer使用了Keep-alive机制,过了两个小时把这个空闲的连接当成是死链接,然后把连接关闭了的原因呢?或者其他类似的什么原因?
weiminyinhai 2009-12-27
  • 打赏
  • 举报
回复
可能是sql语句的判断不正确,应该每次查询时,用一个sql语句,要做判断的啊,要不它会将所有sql语句都执行了的
tudoumayi 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]
是不是你没有写事务判断 没有释放掉内存??
[/Quote]
我不懂数据库不知道什么是事务判断呵呵。不过我的查询语句很简单,都是像“select userID form odb.UserList where username='zhangsan'”这样的。
所有的内存都是放了,如果让程序过一段时间就结束,经过检测没有内存泄漏。
--小F-- 2009-12-27
  • 打赏
  • 举报
回复
是不是你没有写事务判断 没有释放掉内存??
dawugui 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 tudoumayi 的回复:]
最近写个程序使用ODBC连接数据库,整个过程一次连接进行多次查询,每次查询一个语句就够了,但是查询的频繁,有的时候查询一条语句要用很久才会查询到,怎么才能够提高效率呢?

另外连接后过很长时间不查询(每次看到都是一夜12个小时左右),再进行查询时会产生10054错误,不知道是怎么回事?
[/Quote]
你用什么语言?
一般每个语言都有专用接口,实在不行了,才用odbc.

帮顶.
bancxc 2009-12-27
  • 打赏
  • 举报
回复
不懂帮顶

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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