在使用C#代码向Oracle数据库取数据,但是因为是面向对象的方式,所以在C#中的Model对象,在Oracle中也建立了相应的对象,而且在C#的Oracle连接代码中,要做好相应的映射。
在运行的时候,发现抛出了这个异常:
ex=System.InvalidOperationException: 未指定'dataSource='xxxxxx' schemaName='xxx' typeName='xxx'的定制类型映射或该映射无效
at Oracle.DataAccess.Types.OracleUdt.GetFactory(OracleUdtDescriptor udtDesc)
at Oracle.DataAccess.Client.OracleParameter.SetUDTFromArray(OracleConnection conn, Object array, Int32 i)
at Oracle.DataAccess.Client.OracleParameter.PreBind_Collection(OracleConnection conn)
at Oracle.DataAccess.Client.OracleParameter.PreBind(OracleConnection conn, IntPtr errCtx, Int32 arraySize)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at HCC.Base.Comm.Dao.OraHelper.ExecuteDataTableSp(String dbkey, String procName, List`1 prams)
通过各种查找,发现问题的出处在于一不小心在Mapping代码中写错了UdtTypeName,这就导致了这个异常。把UdtTypeName拼写改正,就能使代码正常运行。