私は2つのテーブルTable1、Table2を持っています。最初は、table1に1行を挿入し、挿入された行のIDを取得する必要があります。このIDをtable2に使用します。しかし、table2にデータを挿入中にエラーが発生した場合は、table1もロールバックする必要があります。私はステートメントを使用して書いていますが、まだこれは起こっていません。これは私がデータベースにコミットされているデータをロールバックする方法
using(cn = new SqlConnection(connectionString))
{
cn.open()
using (var cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = Constants.InsertNewJob; // inserts a job in table1
try
{
var jobId = Convert.ToInt32(cm.ExecuteScalar());
DataTable dt = QueueData.ToDataTable(); // queuedata contains large data which is converted to datatable
dt.Columns.Add("JobId", typeof(int), jobId.ToString()); // adding the retrieved jobId to datatable
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(cn))
{
bulkCopy.DestinationTableName = Constants.DestinationTableName; //Table 2 which uses job id which is retrieved from Table 1
bulkCopy.ColumnMappings.Add("JobId", "JobId");
bulkCopy.ColumnMappings.Add("DateTime", "DateTime");
bulkCopy.WriteToServer(dt);
}
}
catch(Exception ex)
{
Logger.Error(ex.Message, "Error while inserting data");
}
}
catch (Exception ex)
{
Logger.Error(ex.Message, "Error while inserting new job into transaction table");
}
}
cn.close()
}
はまだTABLE1に追加されたデータを一括挿入する表に誤りがある場合に裏打ちされたロールを取得していないしようとしたものです。親切に助けてください。 ありがとう
こちらのキーワードは取引です。 https://msdn.microsoft.com/en-us/library/2k2hy99x(v=vs.110).aspxを参照してください。 'using'文はエラー時に魔法のように物事をロールバックしません。 –