Oracle.ManagedDataAccess.DLL出现异常,索引超出了数组界限。

您所在的位置:网站首页 什么叫索引超出了数组界限的数据 Oracle.ManagedDataAccess.DLL出现异常,索引超出了数组界限。

Oracle.ManagedDataAccess.DLL出现异常,索引超出了数组界限。

2024-07-15 04:17:25| 来源: 网络整理| 查看: 265

ILSPY找出了出问题的那一段源码,但是,看不出哪里有原因,datarow明明次第五个元素时先有判断的。大招唤术——牛人们来帮我看看吧,找出具体是哪句代码出了问题,因为这个方式是没有参数的,而且是查询操作,而且查询语句是没有问题的(不然就报oracle错误了)。

 

而且,【索引超出了数组界限】这种情况出现在查询操作中,真心让我无语啊,所有数据都来源于数据库,假如期间数组大小出了问题,我想应该就是这一段代码的问题了。

1 // Oracle.ManagedDataAccess.Client.OracleDataReader 2 internal DataTable GetMinSchemaTable() 3 { 4 if (ProviderConfig.m_bTraceLevelPrivate) 5 { 6 Trace.Write(OracleTraceLevel.Private, OracleTraceTag.Entry, new string[0]); 7 } 8 DataTable result; 9 try 10 { 11 if (this.m_readerImpl == null || this.m_readerImpl.m_sqlMetaData == null) 12 { 13 result = null; 14 } 15 else 16 { 17 DataTable dataTable = null; 18 if (this.m_sqlStatementType != SqlStatementType.SELECT) 19 { 20 if (this.m_refCursor != null) 21 { 22 RefCursorInfo refCursorInfo = this.m_refCursor.m_refCursorInfo; 23 if (refCursorInfo != null && refCursorInfo.columnInfo.Rows.Count > 0) 24 { 25 dataTable = refCursorInfo.columnInfo; 26 } 27 } 28 else 29 { 30 ConfigBaseClass.StoredProcedureInfo storedProcInfo = ConfigBaseClass.GetInstance(true).GetStoredProcInfo(this.m_storedProcName); 31 if (storedProcInfo != null) 32 { 33 dataTable = storedProcInfo.GetColumnInfo(this.m_readerImpl.m_currentRefCursorIndex); 34 } 35 } 36 } 37 DataTable dataTable2 = new DataTable("MinSchemaTable"); 38 this.PopulateMetaData(false); 39 dataTable2.MinimumCapacity = this.m_fieldCount; 40 if (this.m_sqlStatementType != SqlStatementType.SELECT) 41 { 42 dataTable2.ExtendedProperties["REFCursorName"] = ((this.m_readerImpl.m_currentRefCursorIndex == 0) ? "REFCursor" : ("REFCursor" + this.m_readerImpl.m_currentRefCursorIndex)); 43 } 44 dataTable2.Columns.Add("ColumnName", typeof(string)); 45 dataTable2.Columns.Add("BaseColumnName", typeof(string)); 46 dataTable2.Columns.Add("BaseTableName", typeof(string)); 47 dataTable2.Columns.Add("OraDbType", typeof(OracleDbType)); 48 dataTable2.Columns.Add("BaseSchemaName", typeof(string)); 49 ColumnLocalParsePrimaryKeyInfo columnLocalParsePrimaryKeyInfo = ColumnLocalParsePrimaryKeyInfo.Null; 50 bool flag = this.m_readerImpl.m_sqlMetaData.m_sqlMetaInfo != null && this.m_readerImpl.m_sqlMetaData.m_sqlMetaInfo.m_columnMetaInfo != null; 51 for (int i = 0; i < this.m_fieldCount; i++) 52 { 53 DataRow dataRow = dataTable2.NewRow(); 54 ColumnDescribeInfo columnDescribeInfo = this.m_readerImpl.m_sqlMetaData.m_columnDescribeInfo[i]; 55 if (flag) 56 { 57 columnLocalParsePrimaryKeyInfo = this.m_readerImpl.m_sqlMetaData.m_sqlMetaInfo.m_columnMetaInfo[i]; 58 } 59 dataRow[0] = columnDescribeInfo.pColAlias; 60 dataRow[1] = columnLocalParsePrimaryKeyInfo.m_columnName; 61 dataRow[2] = columnLocalParsePrimaryKeyInfo.pTabName; 62 dataRow[3] = this.GetOraDbType(i); 63 dataRow[4] = columnLocalParsePrimaryKeyInfo.m_schemaName; 64 if (this.m_sqlStatementType != SqlStatementType.SELECT && dataTable != null) 65 { 66 object obj = dataTable.Rows[i]["ColumnName"]; 67 if (obj != null && obj != DBNull.Value) 68 { 69 dataRow[0] = (string)obj; 70 } 71 object obj2 = dataTable.Rows[i]["BaseColumnName"]; 72 if (obj2 != null && obj2 != DBNull.Value) 73 { 74 dataRow[1] = (string)obj2; 75 } 76 object obj3 = dataTable.Rows[i]["BaseTableName"]; 77 if (obj3 != null && obj3 != DBNull.Value) 78 { 79 dataRow[2] = (string)obj3; 80 } 81 object obj4 = dataTable.Rows[i]["ProviderType"]; 82 if (obj4 != null && obj4 != DBNull.Value) 83 { 84 dataRow[3] = (OracleDbType)obj4; 85 } 86 object obj5 = dataTable.Rows[i]["BaseSchemaName"]; 87 if (obj5 != null && obj5 != DBNull.Value) 88 { 89 dataRow[4] = (string)obj5; 90 } 91 object obj6 = dataTable.Rows[i]["UdtTypeName"]; 92 if (obj6 != null && obj6 != DBNull.Value) 93 { 94 dataRow[5] = obj6; 95 } 96 } 97 dataTable2.Rows.Add(dataRow); 98 } 99 dataTable2.AcceptChanges(); 100 result = dataTable2; 101 } 102 } 103 catch (Exception ex) 104 { 105 OracleException.HandleError(OracleTraceLevel.Private, OracleTraceTag.Error, ex, null); 106 throw; 107 } 108 finally 109 { 110 if (ProviderConfig.m_bTraceLevelPrivate) 111 { 112 Trace.Write(OracleTraceLevel.Private, OracleTraceTag.Exit, new string[0]); 113 } 114 } 115 return result; 116 }

来看看所抛出的异常:

1 索引超出了数组界限。 2 在 Oracle.ManagedDataAccess.Client.OracleDataReader.GetMinSchemaTable() 3 在 Oracle.ManagedDataAccess.Client.OracleDataReader.set_IsFillReader(Boolean value) 4 在 Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) 5 在 Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 6 在 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) 7 在 EdiSharp.Utility.Data.OracleManagedDbHelperBase.GetDataTable(String sql) 8 在 Cot_DataFactory.OracleDAL.OracleDBHelper.GetDataTable(String SQLString) 9 在 Cot_DataFactory.BLL.B_CtnDymanic.ChangeLYGTZW(String wt_no, String ctn, Int32 state, String strIODate) 10 在 Cot_DataFactory.BLL.B_CtnDymanic.FullCtnOut(String wt_no, String ctn, String ctn_type, String ctn_corp, String strIODate) 11 在 Cot_DataFactory.Handles.Sync_Empty_Ctn.Work()

显然不是Oracle数据库抛出的,而是这最后一个方法抛出的,就是那个

Oracle.ManagedDataAccess.Client.OracleDataReader.GetMinSchemaTable()方法,这个方法的源码就是上面的那段。


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭