我正在维护一个旧的VB6应用程序,它具有一种内置查询功能。 该功能通常很有效,但在用户输入特定查询时会崩溃。对于给定的查询,崩溃可以100%重现,并且恰好发生在代码中的相同位置。
在线
toto = rcs.Fields(i)
,VB6从OLE-DB捕获阻塞错误:“多步OLE DB操作生成错误”(执行错误-214721778(80040e21)
“我”并非出界。其他列表现出同样的问题。当崩溃时崩溃,rcs.Fields(i + 1).Value为Null,rcs.Fields(i + 2).Value会引发相同的错误,并且rcs.Fields(i + 3).Value有一个非空和有效值。 它似乎与返回的结果数无关,因为我在其他表上测试了select语句并且它们没有崩溃。 该错误似乎与某些列有关,因为从select中删除了一些(但只有特定列,类型为date)会阻止应用程序崩溃。它与列的总数没有直接关系(因为事情似乎适用于大量列,我已对其进行了测试)。
连接打开如下:
conn.ConnectionString = "uid=uidValue;pwd=pwdValue;DRIVER={Microsoft ODBC for Oracle};server=serverValue"
conn.ConnectionTimeout = 30
我已经上传了两个ODBC日志,一个包含崩溃前的内容(http://pastebin.com/PH1nQ2VC),另一个(http://pastebin.com/AJqsYviQ)刚刚打开我的连接。连接打开时会有一些可疑消息,但实际上很难判断它们是否与错误有关。
查询:
SELECT
table_.someDateField -- type DATE
FROM
table_actual_name table_
WHERE
table_.someStringField LIKE '%5582%' -- type VARCHAR2 (10)
-- notes
-- someDateField can be NULL
-- someStringField can be NULL too (although that would make no sense and the actual database has 1 line with a NULL)