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;
建議在程式不要寫"*"。
附連線字串說明:
(文字描述 是自動翻譯的可能有些不準)。
連線字串屬性 | 描述 | 預設值 |
---|---|---|
|
連線的最長生存時間(以秒為單位)。 |
|
|
等待池中的免費連線的最長時間(以秒為單位)。 |
|
|
如果設定為,則返回隱式資料庫連線 僅在.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