0

我一直在不断增加频率的客户端上导致间歇性错误。

我有一个处理数据的应用程序,并从运行在 Windows Server 2008 上的名为 Timberline 的会计包中读取数据。Timberline 系统使用 Pervasive 数据库,而我的应用程序通过使用 DSN 的 ODBC 驱动程序与它通信。

我已经缩减了我的应用程序并编写了一个简单的测试应用程序,以便我可以用我能想到的最简单的步骤重现这个问题。我的测试应用程序是用 C# 编写的,它可以做 3 件事:

1) 使用 DSN 打开 ODBC 连接 - 这始终有效 2) 运行没有 ORDER BY 子句的简单 SELECT 查询 - 有效 3) 运行带有 ORDER BY 子句的简单 SELECT 查询 - 错误!

错误很神秘:

System.Data.Odbc.OdbcException (0x80131937): ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]Unable to open SWPFile.
    ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]File Manager: Unable to open file.Operating system LastError = 123
    ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]Bad operation for current SWP mode
    ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]function i32AddColumn was called in Closed mode
    ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]General Error in Internal Tables
    ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]Unable to open SWPFile.
    ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]Bad operation for current SWP mode
    ERROR [HY000] [Sage Timberline Office][Sage Timberline Office ODBC Driver]General Error in Internal Tables

这不是很有帮助。但是使用 ProcessMonitor 观看,我看到我的应用程序正在访问 TEMP 环境变量中设置的文件夹:

C:\Users\Partners\AppData\Local\Temp\3

当该位置有一个名为“3”的文件而不是名为“3”的文件夹时,就会出现此问题。因此,某些进程需要一个名为“3”的文件夹,或者能够创建这样一个文件夹。如果文件“3”存在,那么我会收到该错误。我可以可靠地重现这一点。我也认为 ORDER BY 子句与问题没有直接关系,只是潜在问题的副作用。

简单的解决方案是删除“3”文件。然而,这个程序每天运行几次,而且那个“3”文件每隔一段时间就会神秘地出现。有谁知道什么可能会创建这个文件?如果我能找到该文件的来源,那么我也许可以阻止它。每次在我的进程运行之前简单地删除它是一个完全有效的解决方案,但是很笨拙。

请注意,我无法控制 ODBC 客户端或 Pervasive 数据库。我的应用程序不拥有该系统,只是与它通信。

4

0 回答 0