问题:
在.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;
建议在程序不要写"*"。
附连接字符串说明:
(文字描述 是自动翻译的可能有些不准)。
连接字符串属性 | 描述 | 默认值 |
---|---|---|
|
连接的最长生存时间(以秒为单位)。 |
|
|
等待池中的免费连接的最长时间(以秒为单位)。 |
|
|
如果设置为,则返回隐式数据库连接 仅在.NET存储过程中受支持 |
|
|
Oracle Net服务名称,连接描述符或一个简单的连接命名,用于标识要连接的数据库。 |
空字符串 |
|
管理特权: |
空字符串 |
|
未使用过多的已建立连接时关闭的连接数。 |
|
|
在COM +事务或的上下文中控制连接的登记行为和功能 |
|
|
使ODP.NET连接池能够在Oracle RAC服务,服务成员或节点关闭时主动从池中删除连接。与RAC,Data Guard或单个数据库实例一起使用。 |
|
|
使ODP.NET连接池能够基于负载平衡咨询和服务目标在Oracle RAC实例之间平衡工作请求。 |
|
|
使用池中的所有连接时要创建的新连接数。 |
|
|
池中的最大连接数。 |
|
|
缓存元数据信息。 |
|
|
池中的最小连接数。 |
|
|
由指定的用户密码 |
空字符串 |
|
在连接字符串中检索密码。 |
|
|
连接池。 |
|
|
指示事务在整个生命周期内是本地事务还是分布式事务。 |
可推广 |
|
代理用户的用户名。 |
空字符串 |
|
代理用户的密码。 |
空字符串 |
|
连接返回池时清除语句缓存。 |
|
|
启用了语句缓存和缓存大小,即可以缓存的最大语句数。 |
|
|
Oracle用户名。 |
空字符串 |
|
验证来自池的连接。 |
|
Self Tuning |
指定是否为ODP.NET应用程序启用自调整。 |
true |
参考官网:
https://docs.oracle.com/cd/B28359_01/win.111/b28375/featConnecting.htm