Oracle数字映射(ODP.NET)

时间:2019-07-17 17:48:13

标签: 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类的某些设置和/或字段)。

1 个答案:

答案 0 :(得分:0)

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

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