我们正在使用C#和.Net 4.5从Oracle数据库下载数据。从ODBC读取器读取Oracle CLOB数据超级慢
values[]
是一个对象数组; 阅读器是ODBC阅读器,具有与CLOB数据的Oracle数据库表的开放连接。
下面是相关代码:
if (reader.Read())
{ //Download and save the values
for (int x = 0; x < reader.FieldCount; x++)
{ //Populate all the values
values[x] = reader[x]; //this line seems to cause execution to hang
}
//
//blah blah blah
//
}
的C#代码似乎挂就行了values[x] = reader[x];
。
我们将行读取中的每一列都分配给一个特殊的对象数组,因为我们以后需要对这些数据做单独的事情,而不必担心此刻的数据类型。
问题在于,当一个表使用大(> 28,000)的Oracle CLOB数据列命中时,该行永远不会完成。
如果我们从odbc阅读器读取的内容中删除CLOB列,那么所有内容都可以正常工作。
问题:
- 为什么会变成这样?不应该阵列分配比较快?
- 什么是一些可能的解决方法,所以我们可以保持CLOB列在下载的数据?我们 需要保持ODBC阅读器作为通用的ODBC阅读器(而不是特定于Oracle)。
该应用程序已编译并且必须保持32位。
谢谢!
Thanks @Hambone。我们使用ODBC的迫切理由是因为这个应用程序可以针对众多数据库运行,而且我们不希望为每个数据库专门编写代码。例如,这个应用程序可以查询SQL Server,Oracle,使用32位ODBC Tibco驱动程序的旧数据库以及PostGre数据库。代码现在可用于除最近的Oracle CLOB数据之外的所有应用程序。鉴于有限的资源,很容易弄清楚为什么会发生这种情况。 –
我打算把它作为现在的答案。不幸的是,我们目前没有时间/资源来测试这个理论并且专门使用ODP编写代码,但是如果我们希望能够回到并更新它。 :-) –