首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL Native Client (v2005)时,regsvr32会导致CDatabase析构程序挂起

使用SQL Native Client (v2005)时,regsvr32会导致CDatabase析构程序挂起
EN

Stack Overflow用户
提问于 2012-04-05 22:56:42
回答 1查看 233关注 0票数 2

我在Visual Studio2005中有一个C++ COM dll,它使用SQL Server (v2000)驱动程序连接到数据库(SQL Server2005)。最近,我们的DB团队要求我们将SQL Server驱动程序从SQL Server (v2000)升级到SQL Native Client (v2005)或SQL Server Native Client 10.0 (v2007)。

应用程序构建得很好。然后,当我在DLL上执行regsvr32命令以注册COM时,应用程序挂起。当我调试代码时,我发现在主应用程序(继承自CWinApp)的InitInstance中,应用程序使用存储过程将启动消息记录到数据库中。

对该日志消息的调试表明,创建了一个执行存储过程的CDatabase对象。存储过程将正确执行;消息将记录到数据库中,并将执行返回到C++代码。然后,当CDatabase对象关闭时(通过调用CDatabase::Close()),应用程序挂起。我调试了CDatabase代码,发现在CDatabase::Close()中调用了

代码语言:javascript
复制
AFX_SQL_SYNC(::SQLFreeConnect(m_hdbc));

正是在这个调用中,执行不会返回。调试器返回(运行)状态,什么也不会返回。当我尝试执行Debug -> Break All时,我得到一条消息,指出没有正在运行的线程,并且进程可能会死锁。

这只在调用REGSVR32的过程中发生。如果我为regsvr32部分选择Sql Server驱动程序,然后将其更改为Sql Native Client或Sql Server Native Client v10.0,则应用程序将正常工作。

我也在与微软合作,但我们的时间不多了。任何帮助或想法都将受到极大的欢迎!

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2012-04-05 23:32:49

下面链接中的人似乎已经通过在他的主应用程序中动态加载ODBC DLL解决了这个问题,而不仅仅是在DLL中。这能以某种方式适用于你的情况吗?

SQLFreeHandle Deadlock Issue?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10031000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档