Oracle批量插入并忽略.NET中的错误

时间:2017-11-15 16:49:03

标签: c# .net oracle bulkinsert odp.net

我想将行批量插入Oracle数据库,理想情况下,忽略行上发生的任何错误,以便插入可成功插入的行。

例如,如果表中有一个重复的device_id,measurement_date对,我不想插入给定的行。同时,我不希望我的整个插入错误输出并且不插入任何内容。有没有办法做到这一点,还是我必须捕获异常,然后一次插入一行重试?

List<MeasurementInsertData> measurements = new List<MeasurementInsertData> measurements();

//Add some measurements...

string insertStatement = @"insert into measurement (device_id, measurement_date, value, status) 
                                values (:DeviceId, :MeasurementDate, :Value, :Status)";
using (OracleConnection dbConn = new OracleConnection(ConnectionString))
{
    dbConn.Open();
    OracleCommand command = dbConn.CreateCommand();

    command.CommandText = insertStatement;
    command.CommandType = CommandType.Text;
    command.BindByName = true;
    command.ArrayBindCount = measurements.Count();

    command.Parameters.Add(":DeviceId", OracleDbType.Int32, measurements.Select(x => x.DeviceId).ToArray(), ParameterDirection.Input);
    command.Parameters.Add(":MeasurementDate", OracleDbType.Date, measurements.Select(x => x.MeasurementDate).ToArray(), ParameterDirection.Input);
    command.Parameters.Add(":Value", OracleDbType.Double, measurements.Select(x => x.Value).ToArray(), ParameterDirection.Input);
    command.Parameters.Add(":Status", OracleDbType.Varchar2, measurements.Select(x => x.Status).ToArray(), ParameterDirection.Input);

    int result = command.ExecuteNonQuery();

    if (result == measurements.Count())
    {
        //insert successful.
    }
}

0 个答案:

没有答案