我想将行批量插入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.
}
}