【问题标题】:Oracle.ManagedDataAccess ORA-12899 - Value too large for columnOracle.ManagedDataAccess ORA-12899 - 值对于列来说太大
【发布时间】:2017-02-21 23:26:31
【问题描述】:

我收到一个“ORA-12899 - 列值太大(实际:5,最大值:4)”,我无法追踪。我正在使用 C# 中的 Oracle.ManagedDataAccess 提供程序进行教科书参数化插入。有人见过这样的吗?

我们正在做的事情看起来像:

var commandText = "insert into MyTable ([a ton of variables])   values(:A,:B,..........)";
using (OracleConnection connection = new OracleConnection(connectionString))
{
    connection.Open();
    using (OracleCommand command = new OracleCommand(commandText, connection))
    {
         for (the ton of variables there are to insert whose values are in a collection)
         command.Parameters.Add(theVariableName, theVariableValue);
    }
    command.ExecuteNonQuery();
}

有什么想法吗?我检查了许多其他答案,但没有运气。

【问题讨论】:

  • 什么是你无法追踪的?哪个输入对于列来说太大了? MyTable 中的列数据类型和大小是什么?如果您不知道,请运行define MyTable 找出答案。缩小范围 - 哪一列是 `varchar2(4)(或者可能是 char(4) 或 number(4))?
  • 原来是排序问题。我认为通过添加字段名称顺序无关紧要。事实证明确实如此。请参阅下面 Chris 的回答。

标签: c# oracle ora-12899


【解决方案1】:

尝试设置 command.BindByName=true。

问题可能在于您在 for“(大量变量...)”循环中添加参数的顺序。 OracleCommand“BindByName”中有一个参数默认为 false,这意味着它将忽略您正在创建的 OracleParameter 中的变量名,而仅依赖于添加它们的顺序。因此,如果您的变量被乱序添加,您肯定需要设置 command.BindByName=true。

【讨论】:

  • 谢谢克里斯,这就是问题所在。我永远猜不到这个默认值。
【解决方案2】:

返回到您将属性大小定义为 4 的数据库的创建。更改表并增加它。

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 2021-05-09
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多