c# - Oracle 号码映射 (ODP.NET)

标签 c# oracle oracle11g ado.net odp.net

根据 Oracle 文档,一个 NUMBER(5,0)列可以容纳 Int16和部分 Int32值。我正在开发一个应用程序(使用 ODP.NET)没有 Entity Framework (EF),并且无法在 App.Config 中定义自定义映射 (edmMappings)文件。 ODP.NET在非 EF 应用程序中不支持 edmMappings(至少它们被忽略)。

测试的 edmMappings:

  • <add NETType="int16" MinPrecision="4" MaxPrecision="5" DBType="Number" />
  • <add name="int16" precision="4" /> (note; next one is int32 which is using precision 9)
  • <add name="int16" value="edmmapping number(4,0)" /> (note; next one is int32 which is using precision 9)

这会导致应用程序出现“问题”,因为它在执行包含 NUMBER(5,0) 列的选择查询时需要 Int16 数据类型。

此刻,我只能想到下一个(不是首选)解决方案:

  1. 更改 NUMBER(5,0)列到 NUMBER(4,0) .
  2. 将(NUMBER(5,0) 的)单元格值转换为 Int32 (而不是预期的 Int16 类型)。

是否有可能(总是)映射 NUMBER(5,0)列到 Int16 (.NET 类型)?

(也许我不知道 OracleConnection、OracleDataAdapter 或 OracleDataReader 类的某个设置和/或字段)。

最佳答案

绝对不可能,原因很简单:number(5,0) 可以保存 -99999 到 99999 之间的任何整数,而 int16 只能保存 65536 个不同的值。没有足够的空间用于任何一对一映射。

请注意,这不是任何语言的限制——这在逻辑上是不可能的。

关于c# - Oracle 号码映射 (ODP.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57081616/

相关文章:

c# - 如何从 View 中获取在文本框中输入的值

C#,html-agility-pack 获取不在标签内的文本

SQL:删除重复记录 - 尽管类型不同

c# - 从数据库中检索错误消息的最佳实践

c# - Azure 表 InsertOrMerge 更新插入 : Can the to-be-merged object be dynamically created?

c# - 为字段填充返回 SQL DataRow 的正确方法

Java Web 应用程序和数据库设计

sql - ORA-29908 : missing primary invocation for ancillary operator

Oracle 中的 MySQL 锁替代方案

sql - 跳过 Oracle TO_DATE 函数中的字符