Oracle.ManagedDataAccess.Client 查询datatable 报 Index was outside the bounds of the array

问题:

在.net core 连接oralce 查询数据返回 DataTable 偶尔报 Index was outside the bounds of the array。

最后发现是修改视图后添加字段,必然报这个错误。

解决方案:

1、在程序里面不要写 select * from aaa; 不要写 *,写固定字段。

2、修改数据库视图或表后,重启你的应用程序池。

3、修改连接字符串(这种方式对影响性能可能有一定影响)

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1522))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=dev)));User Id=1;Password=1;Self Tuning=false;STATEMENT CACHE SIZE=0;METADATA POOLING=false;

这3个配置:

Self Tuning=false;STATEMENT CACHE SIZE=0;METADATA POOLING=false;

建议在程序不要写"*"。 

附连接字符串说明:

(文字描述 是自动翻译的可能有些不准)。

连接字符串属性描述默认值

Connection Lifetime

连接的最长生存时间(以秒为单位)。

0

Connection Timeout

等待池中的免费连接的最长时间(以秒为单位)。

15

Context Connection

如果设置为,则返回隐式数据库连接true

仅在.NET存储过程中受支持

false

Data Source

Oracle Net服务名称,连接描述符或一个简单的连接命名,用于标识要连接的数据库。

空字符串

DBA Privilege

管理特权:SYSDBASYSOPER

空字符串

Decr Pool Size

未使用过多的已建立连接时关闭的连接数。

1

Enlist

在COM +事务或的上下文中控制连接的登记行为和功能System.Transactions

true

HA Events

使ODP.NET连接池能够在Oracle RAC服务,服务成员或节点关闭时主动从池中删除连接。与RAC,Data Guard或单个数据库实例一起使用。

false

Load Balancing

使ODP.NET连接池能够基于负载平衡咨询和服务目标在Oracle RAC实例之间平衡工作请求。

false

Incr Pool Size

使用池中的所有连接时要创建的新连接数。

5

Max Pool Size

池中的最大连接数。

100

Metadata Pooling

缓存元数据信息。

True

Min Pool Size

池中的最小连接数。

1

Password

由指定的用户密码User Id

空字符串

Persist Security Info

在连接字符串中检索密码。

false

Pooling

连接池。

true

Promotable Transaction

指示事务在整个生命周期内是本地事务还是分布式事务。

可推广

Proxy User Id

代理用户的用户名。

空字符串

Proxy Password

代理用户的密码。

空字符串

Statement Cache Purge

连接返回池时清除语句缓存。

false

Statement Cache Size

启用了语句缓存和缓存大小,即可以缓存的最大语句数。

10

User Id

Oracle用户名。

空字符串

Validate Connection

验证来自池的连接。

false

Self Tuning

指定是否为ODP.NET应用程序启用自调整。false:禁用自调整。用于Self Tuning连接字符串属性。true:启用了自调整 默认

true

参考官网:

 https://docs.oracle.com/cd/B28359_01/win.111/b28375/featConnecting.htm

原文地址:https://www.cnblogs.com/piaoxuewuming/p/13809625.html