【发布时间】: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)1 和 263.9( 〜32次)
标签: c# sql-server oracle11g sqlbulkcopy