【问题标题】:Rounding off numeric data while using SqlBulkCopy in C#在 C# 中使用 SqlBulkCopy 时舍入数字数据
【发布时间】:2013-02-05 11:42:25
【问题描述】:

我正在使用 SqlBulkCopy 将数据从 Oracle 11g 源导入 MS SQL Server 2012。但 Oracle 中的 NUMERIC 列之一包含诸如 53682.0(~35times)1、263.9(~32times) 之类的值。 Sql Server 中的目标列当前是 FLOAT 数据类型,目前我收到以下异常:

算术运算导致溢出。

这是我的示例代码:

using (SqlConnection conn = new SqlConnection(destConnString))
        {
            conn.Open();
            try
            {
                using (OracleConnection connection = new OracleConnection(srcConnString))
                {
                    using (OracleCommand command = new OracleCommand(selectQuery, connection))
                    {
                        connection.Open();
                        using (OracleDataReader reader = command.ExecuteReader(CommandBehavior.Default))
                        {
                            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, trans))
                            {
                                bulkCopy.DestinationTableName = tableName;
                                bulkCopy.BulkCopyTimeout = 0;
                                bulkCopy.WriteToServer(reader);
                            }
                        }
                    }
                }
                trans.Commit();
            }
            ....

我正在尝试对这些数据进行四舍五入,但没有成功,我也无法更改 Oracle 表中的任何内容。

【问题讨论】:

  • 您不能更改查询中的列吗?在 SQL Server 实例之间进行批量复制时,我只需将 CAST 字段添加到查询中的目标数据类型。
  • 浮点列的取值范围是 -1.79E+308 到 -2.23E-308、0 和 2.23E-308 到 1.79E+308。我怀疑 Oracle 中的数字列是否超出了该范围。我认为这与数据类型以外的其他因素有关。
  • Oracle 的数据是否以逗号形式到达,如您在值“1,263.9(~32times)”中所示?
  • @Catcall 不,它们不带逗号,上面的逗号用于分隔两个样本编号 53682.0(~35times)1263.9( 〜32次)

标签: c# sql-server oracle11g sqlbulkcopy


【解决方案1】:

您不能只修改您的 Oracle SELECT 查询吗?截断有问题的数值?

【讨论】:

  • 谢谢,这确实是一个简单的解决方案,我没想到! :)
猜你喜欢
  • 2010-11-04
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
相关资源
最近更新 更多