【问题标题】:Unsupported Oracle data type 101 encountered遇到不支持的 Oracle 数据类型 101
【发布时间】:2017-08-22 22:23:51
【问题描述】:
OracleDataAdapter oAdp = new OracleDataAdapter("select * from " + TABLE_NAME, SourceConnStr);
oAdp.Fill(dtTable);

执行此代码时出现错误:

Unsupported Oracle data type 101 encountered.

所以我进行了大致相同的搜索,结果发现 .NET 目前不支持或识别二进制浮点/双精度以及它所指的表中的列之一;是二进制双精度数据类型。请提出一种方法来识别表的列是否属于二进制浮点/双精度数据类型,并将其转换为合适的数字或 varchar 等不同的数据类型。

Name           Null     Type          
-------------- -------- -------------       
EMPID          NOT NULL VARCHAR2(20)  
EMPNAME        NOT NULL VARCHAR2(50)  
EMPTYPE        NOT NULL NUMBER(38)    
EMPPHOTO                BINARY_DOUBLE  
DATEOFJOINING           DATE                 
CONTACTNO               VARCHAR2(20)  

【问题讨论】:

  • 显示表结构
  • @MuhammadMuazzam 我刚刚编辑了问题希望对您有所帮助
  • 您使用的是哪个 DataAcces 库? System.Data.OracleClient 或 Oracle.DataAccess.Client 或 Oracle.ManagedDataAccess.Client ?
  • @Arie System.Data.OracleClient
  • System.Data.OracleClient 已弃用。由于 BINARY_DOUBLE 和 BINARY_FLOAT 是在 Oracle 数据库 10g 中添加的,因此它可能不受支持。

标签: c# .net oracle oracle11g


【解决方案1】:

您使用哪个OracleDataAdapter?我猜它来自 System.Data.OracleClient.OracleDataAdapter,如果您使用 Oracle DB,请使用 ODAC,Oracle.DataAccess.Client.OracleDataAdapter,它适用于 oracle 数据类型。

【讨论】:

    【解决方案2】:
    1. 识别结构:

      select * from all_tab_columns where data_type  like 'BINARY%' ;
      
    2. 解决方法: 在您的select 中,使用例如数据转换替换列TO_CHAR:

      new OracleDataAdapter("select column_a, column_b, to_char(column_c_binary_smthg) from " 
          + TABLE_NAME, SourceConnStr);
      

    【讨论】:

    • 这里的问题是用户选择在哪个表上进行操作,因此我不能假设随机转换单个列。它必须动态识别导致问题的列并进行纠正
    • 是的,当然。使用同一张表列出 TABLE_NAME 中的列:"select column_name from all_tab_columns where TABLE_name=" + TABLE_NAME
    猜你喜欢
    • 2013-07-31
    • 2023-03-31
    • 2020-09-06
    • 2018-08-11
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多