• ORACLE与.NET类型对应关系(转)


    想来这个是最重要的事情了,因为多数情况下,我们使用dbhelper来调用数据库的时候,是因为如下三个地方导致错误:
    1、错误的sql语句:末尾多了分号,少了部分关键字
    2、sql中的参数与parameter[]不对应。
    3、parasmeter[]中的数据类型转为Oracle的数据类型中出错。
    通常情况下,我们大设置paramenter[]时,只会给出变量名和对应的值(多数是.NET中的变量)去让ODP自动执行数据类型转换,而ODP一般都可以正确的转换,但是,有时候也会出现一些意外的情况,这时,就需要我们手动来明确的设置。

    ODP.NET的数据类型以结构体或者类的形式来支持ORACLE的本地类型以及PL/SQL的数据类型。其中结构体是值类型,而类则是引用类型。 ORACLE的数据类型比.NET自己的数据类型具有更大的优势,比如OracleDecimal支持38位而.NET的Decimal只支持28位。

    下面表中展示了ORACLE数据库的本地类型(包含PL/SQL的)、ODP.NET的数据类型以及.NET的数据类型的对应关系。
    而我们要关心的是把.NET的数据类型转为正确的ODP.NET数据类型就ok了,剩下的操作ODP.NET会帮助我们转换,说白了,就是我们在
    New OracleParamter(){ParameterName=":name",Value=var}的时候,确保我们的.NET类型var与数据库中的对应,或者在我们.NET数据类型无法满足使用的时候,使用ODP.NET的类型声明变量类型。

    Oracle Native Data Type or PL/SQL Data Type
    ODP.NET Type
    .NET Framework Data Types
    BFILE
    OracleBFile class
    System.Byte[]
    BINARY_DOUBLE
    OracleDecimal structure
    System.Decimal
    BINARY_FLOAT
    OracleDecimal structure
    System.Decimal
    BINARY_INTEGER (PL/SQL only)
    OracleDecimal structure
    System.Decimal
    BLOB
    OracleBlob class
    System.Byte[]
    BOOLEAN (PL/SQL only)
    OracleBoolean structure
    System.Boolean
    CHAR
    OracleString structure
    System.String
    CLOB
    OracleClob class
    System.String
    DATE
    OracleDate structure
    System.DateTime
    INTERVAL DAY TO SECOND
    OracleIntervalDS structure
    System.TimeSpan
    INTERVAL YEAR TO MONTH
    OracleIntervalYM structure
    System.Int64
    LONG
    OracleString structure
    System.String
    LONG RAW
    OracleBinary structure
    System.Byte[]
    NCHAR
    OracleString structure
    System.String
    NCLOB
    OracleClob class
    System.String
    NUMBER
    OracleDecimal structure
    System.Decimal
    NVARCHAR2
    OracleString structure
    System.String
    PLS_INTEGER (PL/SQL only)
    OracleDecimal Structure
    System.Decimal
    RAW
    OracleBinary structure
    System.Byte[]
    REF
    OracleRef class
    System.String
    REF CURSOR (PL/SQL only)
    OracleRefCursor class
    Not Applicable
    ROWID
    OracleString structure
    System.String
    TIMESTAMP
    OracleTimeStamp structure
    System.DateTime
    TIMESTAMP WITH LOCAL TIMEZONE
    OracleTimeStampLTZ structure
    System.DateTime
    TIMESTAMP WITH TIME ZONE
    OracleTimeStampTZ structure
    System.DateTime
    UROWID
    OracleString structure
    System.String
    VARCHAR2
    OracleString structure
    System.String
    XMLType
    OracleXmlType class
    System.String

    需要注意的是:

      • 所有数字类型都使用DECIMAL,除了INTERVAL YEAR TO MONTH对应INT64除外(这个类型我们基本不会使用到)。
      • ROWID,UROWID使用的是STRING而不是数字类型.
      • 时间相关的全部使用DateTime,除了INTERVAL DAY TO SECOND使用TimeSpan(这个类型我们基本不会使用到)。
      • RAW使用的是Byte[],所以,LONG RAW使用的也是Byte[].
  • 相关阅读:
    25条提高Visual Studio编码和调试效率的技巧
    难得的中文ASP.NET 5/MVC 6入门教程
    入门产品经理如何分析设计一个产品
    DNX/ASP.NET 5的xUnit入门向导
    打造理想的Windows 10 APP开发环境的5个步骤
    激励远程员工的5个高招
    Windows Live Writer技巧
    免费电子书:C#代码整洁之道
    JavaScript前端框架的思考
    利用Browser Link提高前端开发的生产力
  • 原文地址:https://www.cnblogs.com/yy1234/p/8695081.html
Copyright © 2020-2023  润新知