【问题标题】:Limit the size of a long?限制长的大小?
【发布时间】:2021-12-17 14:00:06
【问题描述】:

我在 (oracle) 数据库中有一个表,其中包含 NUMBER(12) 列。我不能在 C# 中使用int,因为它很小,所以我使用了long。但是long 对于这个表列来说太大了。在将数据发送到数据库之前,有什么方法可以限制 long 的大小?否则我会得到一个错误 ORA-21525,因为我超出了表格列的大小。发送到数据库的数据实际上是一个List<long>

【问题讨论】:

  • 向我们展示您如何在参数化良好的 sql 查询中声明参数,向我们展示表 def、调用查询的代码以及导致问题的数据示例。如果您的示例数据很长,1234567890123,那么 C# 的工作就是不发送大于 999,999,999,999 的数字..
  • 你的价值观从何而来?
  • 顺便说一句,你将如何处理超过的多头?
  • 如果您使用的是 EF,请将 long 包装在一个结构中并使用值转换。否则,在您的构造函数中添加一个检查。
  • 无论您在 C# 中使用什么类型,为什么要尝试插入大于列中允许的精度的数字?这些数字是从哪里来的?要么您的数据不适合您的列大小,因此更改列中的精度,或者您正在插入不应该插入的数字,因此丢弃它们

标签: c# .net oracle .net-framework-4.8


【解决方案1】:

最明显的解决方案是使用限制数字值范围的自定义数字类型。类似的东西

public readonly struct Number12{
    public long Value {get;}
    public Number12(long num){
        if(num > 999999999999 || num < -999999999999 ){
           throw new ArgumentException("number out of rage " +num);
        }
        Value = num;
    }
   // Add operators, conversions etc
}

这样做的一个好处是很明显这个数字有一些特殊的规则。但是使用起来会比较麻烦,而且以后改数据库可能会出问题。

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多