1. 程式人生 > 實用技巧 >Oracle.ManagedDataAccess.Client 查詢datatable 報 Index was outside the bounds of the array

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

ContextConnection

如果設定為,則返回隱式資料庫連線true

僅在.NET儲存過程中受支援

false

DataSource

Oracle Net服務名稱,連線描述符或一個簡單的連線命名,用於標識要連線的資料庫。

空字串

DBA Privilege

管理特權:SYSDBASYSOPER

空字串

Decr Pool Size

未使用過多的已建立連線時關閉的連線數。

1

Enlist

在COM +事務或的上下文中控制連線的登記行為和功能System.Transactions

true

HAEvents

使ODP.NET連線池能夠在Oracle RAC服務,服務成員或節點關閉時主動從池中刪除連線。與RAC,Data Guard或單個數據庫例項一起使用。

false

LoadBalancing

使ODP.NET連線池能夠基於負載平衡諮詢和服務目標在Oracle RAC例項之間平衡工作請求。

false

Incr Pool Size

使用池中的所有連線時要建立的新連線數。

5

Max Pool Size

池中的最大連線數。

100

MetadataPooling

快取元資料資訊。

True

MinPoolSize

池中的最小連線數。

1

Password

由指定的使用者密碼UserId

空字串

PersistSecurityInfo

在連線字串中檢索密碼。

false

Pooling

連線池。

true

PromotableTransaction

指示事務在整個生命週期內是本地事務還是分散式事務。

可推廣

ProxyUserId

代理使用者的使用者名稱。

空字串

ProxyPassword

代理使用者的密碼。

空字串

StatementCachePurge

連線返回池時清除語句快取。

false

StatementCacheSize

啟用了語句快取和快取大小,即可以快取的最大語句數。

10

UserId

Oracle使用者名稱。

空字串

ValidateConnection

驗證來自池的連線。

false

Self Tuning

指定是否為ODP.NET應用程式啟用自調整。false:禁用自調整。用於Self Tuning連線字串屬性。true:啟用了自調整 預設

true

參考官網:

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