【问题标题】:ODP.NET InsertCommand erroneously returns ORA-01401: inserted value too large for columnODP.NET InsertCommand 错误地返回 ORA-01401:插入的值对于列来说太大
【发布时间】:2011-08-18 20:05:15
【问题描述】:

我有一个 C# 函数,它使用 ODP.NET 构造参数化插入查询,由于某种原因,它不断返回“ORA-01401:插入的值对于列来说太大”异常。

我已经彻底检查了有问题的字符串变量的长度,它远远低于数据库列的最大大小(1024 个字符长的 Varchar2 列中有 70 个字符长)。奇怪的是,如果我将值作为字符串而不是参数变量插入,则插入工作正常。这是代码(参数化):

connectionString = GetConnectionString();
conn = new OracleConnection(connectionString);
OracleDataAdapter oda = new OracleDataAdapter();
conn.Open();
insertStatement = "INSERT INTO DOCS (ID, PATH, PAGES, USERID,SUFFIX, MASK) ";
insertStatement += "VALUES (:id, :itemUrl, 1, 'SHAREPOINT\\system',0,'000') ";
oda.InsertCommand = new OracleCommand(insertStatement, conn);
oda.InsertCommand.Parameters.Add(":id", docList[0].taskerID.ToString());
oda.InsertCommand.Parameters.Add(":itemUrl", itemUrl);
count += oda.InsertCommand.ExecuteNonQuery();

我在想,也许我在 ODP.NET 中缺少一些东西,或者实际上我遇到了 ODP.NET 的一个错误。我在我的服务器上使用 9.2.0.7 版的 Oracle.DataAccess。有什么想法吗?

【问题讨论】:

    标签: c# oracle odp.net


    【解决方案1】:

    我只需对您的代码稍作修改就可以使用它,但我没有收到与您相同的异常。

    我所做的唯一更改是在 INSERT 语句中添加“INTO”,并在添加集合项中双引号引用参数名称。


    create table DOCS (id varchar2(70) , path varchar2(70) , pages number, userid varchar2(70) , suffix varchar2(70), mask varchar2(70));
    

    OracleDataAdapter oda = new OracleDataAdapter();
    insertStatement = "INSERT INTO DOCS (ID, PATH, PAGES, USERID,SUFFIX, MASK) ";
    insertStatement += "VALUES (:id, :itemUrl, 1, 'SHAREPOINT\\system',0,'000') ";
    conn.Open();
    oda.InsertCommand =  new OracleCommand(insertStatement, conn);
    oda.InsertCommand.Parameters.Add(":id", "test1");
    oda.InsertCommand.Parameters.Add(":itemUrl", "test2");
    count += oda.InsertCommand.ExecuteNonQuery();
    

    我认为您可能还有其他一些在您的示例中不明显的情况。

    我知道当我的参数的基本顺序与预期的参数集合不同时,我收到了您的错误(很多次)。

    这是由 ODP 默认按位置绑定而不是按名称绑定引起的(就像旧的 oraClient 女士所做的那样)。

    您可以验证参数是否确实在正确的位置,或者只是:

    oda.InsertCommand.BindByName = true ;
    

    【讨论】:

    • 是的,就是这样,我完全忽略了按位置绑定的问题。而且我们这周刚从 System.Data.OracleClient 切换,所以这就是为什么它现在才突然出现来咬我。非常感谢您的帮助!
    猜你喜欢
    • 2015-05-27
    • 2016-07-24
    • 2016-08-10
    • 1970-01-01
    • 2015-11-05
    • 2023-03-23
    • 2015-02-19
    • 1970-01-01
    相关资源
    最近更新 更多