根据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数据类型。
此刻,我只能想到下一个(不受欢迎的)解决方案:
NUMBER(5,0)
列更改为NUMBER(4,0)
。NUMBER(5,0)
的单元格值转换为Int32
(而不是预期的Int16
类型)。 是否可以(总是)将NUMBER(5,0)
列映射到Int16
(。NET类型)?
(也许我不知道OracleConnection,OracleDataAdapter或OracleDataReader类的某些设置和/或字段)。
答案 0 :(得分:0)
绝对不可能,原因很简单:number(5,0)可以容纳-99999到99999之间的任何整数,而int16只能容纳65536个不同的值。没有足够的空间进行一对一的映射。
请注意,这不是任何语言的限制-这是逻辑上的不可能。