【发布时间】:2012-03-27 01:23:14
【问题描述】:
我正在对使用 DAO 访问 SQL Server 的应用程序进行更新。我知道,但现在让我们将 DAO 视为一项要求。
应用程序一直在系统托盘中运行,并定期执行 SQL 服务器操作。由于它一直在运行,并且应用程序的用户将使用笔记本电脑并在建筑物之间转换,因此我将它设计为在活动和非活动状态之间安静地转换。当数据库连接成功时,操作恢复。
在发布此更新之前,我遇到了最后一个问题:连接断开然后重新建立时,SQL 操作会失败。仅当我在连接字符串中指定了主机名时才会发生这种情况。如果我使用 IP,一切都很好(但我需要能够使用主机名)。
这是行为:
1) 一切正常。网络连接良好,数据库操作正常。
2) 失去连接。小“x”出现在任务栏图标上,没有别的。没事。
3) 重新连接。
在第 3 步,我在运行第一个查询时收到“ODBC--调用失败”错误。有趣的是,数据库第一次打开时没有错误。
如果我跳过第 1 步,并在连接断开时启动应用程序,则在第 3 步中一切正常,主机名与否。
我认为这是 DAO 引擎在第一次连接后缓存 DNS 条目的问题,尽管目标 IP 没有改变,所以我不确定。我尝试刷新 Windows DNS 缓存(从 cmd 提示符)无效。即使我将本地主机名与我为开发设置的本地 SQL 服务器一起使用时,也会发生相同的行为。 127.0.0.1没有问题。
我还尝试在活动时间之间 CoUninitialize() DAO 接口,但我无法让它工作。如果有人认为这会有所帮助,我会更加努力。
此行为在 Windows XP 或 7 中是相同的。
感谢您提供的一切!
编辑:我应该提到 - 我在尝试之间关闭数据库连接,然后用
重新打开它m_pDb = m_pDaoEngine->OpenDatabase()
【问题讨论】:
标签: c++ sql-server networking odbc