c# - Oracle 列/值大小问题

标签 c# oracle copy odp.net bulk

我正在使用 ODP.NET 和 Oracle 10g 将数据从数据表传输到数据库表。 我面临的问题是在尝试将值插入 NUMBER(12,3) 列时。该值为 100100100,55 - 我收到错误消息: “1”行“6”列中的错误 ORA-26093: 输入数据列大小 (24) 超过最大输入大小 (22)

但是如果我尝试 100100100,5 它工作正常

这个错误信息对我来说没有任何意义。

谁能解释一下为什么? 谢谢!

这里还有一个抛出该错误的片段:

        OracleBulkCopy bc = new OracleBulkCopy(DBFacade.DbConnection);
        DataTable dt = new DataTable();
        dt.Columns.Add();
        dt.Rows.Add(100100100.11);
        bc.DestinationTableName = "tmp_import_bom";
        bc.ColumnMappings.Add(0, "QTY");
        bc.WriteToServer(dt);

最佳答案

当您在示例代码 dt.Columns.Add() 中创建 DataTable 列时,它默认为字符串类型

我有一个类似的问题,发现问题是 当字符串长度超过 11 时,oracle bulk copy 无法处理将字符串转换为 decimal 或 long

要解决此问题,您需要确保源数据类型是十进制或长整型,而不是字符串。在您的示例代码中,您可以使用 dt.Columns.Add("QTY", typeof(decimal));

详细信息:

据我所知,错误消息实际上告诉我们这种转换的最大字符串长度为 11。消息中的 (24) 和 (22) 引用是输入的字符串长度和允许的最大 x 2. 我输入的字符串是 26641778.595,长度为 12,包括小数点。如果我添加了一个数字,消息将更改为 (26) 等。同样,我也遇到了一个普通旧数字的相同问题,例如长度为 12 的 123456789012。

关于c# - Oracle 列/值大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164805/

相关文章:

c# - WCF 流长度

c# - 将具有未知大小数组的结构从非托管代码传递到托管代码

oracle - 重命名 Oracle 表或 View

oracle - 执行触发器时获取额外消息

c - 在 C 中为我复制的文件创建一个新目录

c - 这个代码是不是不正确?

c# - 如何检查标签是否在xslt中包含特定字符串

c# - 企业库 6 Microsoft.Practices.EnterpriseLibrary.Caching 丢失?

sql-server - 您如何将数百个 MS Access 数据库迁移到中央服务?

arrays - Swift 4 按值复制内部有数组的对象数组