我有一个 C++ 应用程序(使用在 Windows 2000 服务器上针对 SQL 2000 数据库运行的 VS2003 编译)运行良好多年,现在正在崩溃。
我的日志显示数据库连接(使用 SQL Server 驱动程序的 ODBC)将正常工作(读取和更新数据库)然后在抛出异常(并且被捕获/记录但没有真正的细节)之后,连接可以从数据库中读取数据但是不能再更新数据库。
所以我看到一个线程正在读取下一行进行处理,将数据从套接字发送到另一台服务器,尝试将记录更新为已处理和 BOOM。
我从失败的查询中得到的唯一错误信息是:
[Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. [37000]
后跟一个空白,就像您通常会看到查询失败的原因一样(语法错误,找不到表,无论如何,但这次什么都没有)。
此代码处理数万条记录,可能运行数月,并且在此线程(似乎总是第一个受害者,可能只是最忙并首先被攻击)开始阻塞所有其他连接后不久,所有其他连接似乎都有同样的问题 -允许读取,但更新会引发此异常。
上次我快速查看了任务管理器(它很快被弹跳,所以我不能长时间检查),该应用程序使用的是典型的 5 到 6 兆内存,其他资源看起来很正常。
其他应用程序正在使用数据库并且在此期间没有错误。
当查询有效时,我在网上找不到任何你得到这个报告的错误结果的东西......
帮助!