首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#:Oracle数据类型与OracleDbType的等价性

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

Stack Overflow用户
提问于 2009-10-17 20:43:10
回答 5查看 77.7K关注 0票数 24

情况:

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

问题:

对于

  • enumeration
  • There中的每个枚举类型,OracleDbType中与其等效的Oracle PL/SQL数据类型是三种类型的integer

(Int16,Int32,Int64)在OracleDbType中...如何知道要使用哪一个,或者它们都是

假设可以工作?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-17 22:40:44

文档中定义了OracleDbType枚举的值。阅读the ODP for .NET Developer's Guide

至于在Int16、Int32和Int64之间进行选择,它们都应该是有效的。选择与.Net变量的预期大小匹配的值: Int16表示-32768到32767之间的值,Int32表示-2147483648到2147483647之间的值,Int64表示更大的值。似乎有一些关于转换Int和PL/SQL数据类型的有趣之处。检查this blog post by Mark Williams

尾部

2021年的问候。这篇文章刚刚获得好评,所以想必搜索者仍然在寻找它,并发现它是有用的。但请注意,已经有十多年的历史了。因此,它提供的建议可能与较新版本的ODP无关,特别是关于不寻常的行为。请不要在没有自己验证的情况下遵循建议。(这是一般的建议,适用于您在Internet上读到的任何内容,而不仅仅是软件开发!)

Here is the pertinent link for Oracle 21c ODP documentation

票数 18
EN

Stack Overflow用户

发布于 2009-10-17 21:00:19

下面是一种将C#类型转换为最常见的OracleDbTypes的方法

代码语言:javascript
复制
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

票数 27
EN

Stack Overflow用户

发布于 2009-10-19 08:15:55

查看APC's links,它们就是您正在寻找的:根据枚举的名称,映射非常简单。

但是,正如您开始注意到的,整数有一些微妙之处。下面是我的映射:

  • Int16NUMBER(5).
  • Int32NUMBER(10).
  • Int64NUMBER(19).

问题是,如果在NUMBER(38)列上调用GetInt64,即使值在正确的范围内,也会出现异常……

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1583150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档