我有一个问题,那就是在一个频率越来越高的客户端造成间歇性错误。
我有一个处理数据的应用程序,并从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数据库。我的应用程序不拥有该系统,只是与之通信。