C#:Oracle 数据类型与 OracleDbType 等价

标签 c# oracle plsql types type-equivalence


情况:

我正在使用 C# 创建一个应用程序,它使用 Oracle.DataAccess.Client (11g) 通过存储过程对 Oracle 数据库执行某些操作。我知道有一个包含 Oracle 数据类型的特定枚举 (OracleDbType),但我不确定对某些类型使用哪个枚举。

问题:

  • 什么是等效的Oracle PL/SQL 数据 type 中的每个枚举类型 OracleDbType 枚举?

  • 整数分为三种类型
    OracleDbType 中的 (Int16, Int32, Int64) ...怎么知道 用哪个还是都用
    想工作吗?


最佳答案

这是将 C# 类型转换为最常见的 OracleDbTypes 的方法

private static OracleDbType GetOracleDbType(object o) 
{
  if (o is string) return OracleDbType.Varchar2;
  if (o is DateTime) return OracleDbType.Date;
  if (o is Int64) return OracleDbType.Int64;
  if (o is Int32) return OracleDbType.Int32;
  if (o is Int16) return OracleDbType.Int16;
  if (o is sbyte) return OracleDbType.Byte;
  if (o is byte) return OracleDbType.Int16;    -- <== unverified
  if (o is decimal) return OracleDbType.Decimal;
  if (o is float) return OracleDbType.Single;
  if (o is double) return OracleDbType.Double;
  if (o is byte[]) return OracleDbType.Blob;

  return OracleDbType.Varchar2;
}

此外,对于非常大的字符数据值,您可能需要使用 OracleDbType.Clob

关于C#:Oracle 数据类型与 OracleDbType 等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583150/

相关文章:

c# - .Net MemoryStream关闭问题

oracle - PL/SQL : Execute procedure in another procedure

sql - 触发器从另一个表中删除行

c# - System.StackOverflowException 未处理 - C#、.NET

C# 使用导入的非强名称库构建强名称文件

c# - Solidworks C# 插件 - 将字符串发送到宏

mysql - Serializable 隔离级别是否保护数据库免受 ACIDRain 攻击?

oracle - ORA-12704 : character set mismatch

database - 甲骨文数据库 : delete all the contents

Oracle:查询中的 DML 操作