【问题标题】:ASP.Net MVC 3 with Oracle带有 Oracle 的 ASP.Net MVC 3
【发布时间】:2012-07-28 19:53:52
【问题描述】:

我正在做一个使用 Asp.net mvc 3 的项目,并计划将 oracle 11g 数据库作为后端。

我能够毫无问题地访问 oracle 服务器,并将数据成功加载到 html 表中。

当我尝试添加、编辑或删除记录时出现问题。我相信这是一个非常简单的问题,但直到现在,我都无法弄清楚。使用以下简单模型:

class Country
{
    public int CountryId { get; set; }
    public string CountryName { get; set; }
}

CountryId 字段是在 Oracle 使用 NUMBER(10) 创建的,因为我认为这将作为 SQL Server 整数工作。但是引发了一个异常,表明它不能将值作为 Edm.decimal !

我尝试将其设为 NUMBER(19),并将 CountryId 更改为 long,但仍然出现相同的异常。

我花了很长时间寻找一个使用 asp.net mvc 和 oracle 的开源项目,但我找不到!

任何想法,为什么 oracle 不支持整数,长?如何让它在我的 MVC 项目中按预期工作?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 oracle


    【解决方案1】:

    来自Oracle Data Type Mappings

    此数据类型是 NUMBER(38) 数据类型的别名,并且是 设计为使 OracleDataReader 返回 System.Decimal 或 OracleNumber 而不是整数值。使用 .NET 框架 数据类型会导致溢出。

    因此,您需要在 .net 框架中使用 decimal 数据类型来支持 Oracle 中的 NUMBER 数据类型。

    如果您按以下方式映射数据类型会更好:

    [.NET: Int32] = [Oracle:NUMBER(2)..NUMBER(9)*] 
    [.NET: Int64] = [Oracle:NUMBER(10)..NUMBER(18)*]
    [.NET: Double] = [Oracle:NUMBER(x, 0)..NUMBER(x, 15)*]
    [.NET: Double] = [Oracle: FLOAT]
    [.NET: Decimal] = [Oracle:NUMBER] 
    

    【讨论】:

    • 我需要支持C#整数,我应该使用什么Oracle数据类型?
    • 我不知道该怎么做!是 C# 吗?
    • 我做到了,并得到了例外。我尝试了十进制,它起作用了。那么,没有办法使用 int 或 long 数据类型?同一个应用程序应该同时与 SQL Server 一起工作。
    • 在使用我已经通过文档部分指定的 oracle 时,大多数人更喜欢十进制而不是 int 或 long 数据类型...
    【解决方案2】:

    您是否尝试过使用小数或 Int32?我从网上找到的一些文档中得到了我的建议:http://docs.oracle.com/cd/E11882_01/win.112/e18754/featLINQ.htm。让我知道这对您有何帮助。

    【讨论】:

    • 对于@LolCoder 的回答,我认为他是说值类型可以设置为Int64。你能试试吗?您的数据库中的该列是否允许 NULL 值?如果是,也许尝试int?,decimal?,long?,Int32?或 Int64?这 '?'表示该值可以为空。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多