我正在使用 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/