これに対する私のアプローチが正しいかどうか、主に興味があります。私がやろうとしているのは、2 つの配列をループして、データベースのインデックスに値を挿入し、何かが失敗した場合はロールバックすることです。
私が考えていることは、このようなものになります。
SqlCommand cmd = new SqlCommand();
SqlConnection cn = new SqlConnection(s.ConnectionString.ConnectionString);
cmd.Connection = cn;
cmd.CommandText = "asp_FinalInspectionTransaction";
cmd.CommandType = CommandType.StoredProcedure;
SqlTransaction trans = cn.BeginTransaction();
cmd.Transaction = trans;
cn.Open();
try
{
for (int i = 0; i < array1.Length - 1; i++)
{
cmd.Parameters.AddWithValue("@MasterID", masterID);
cmd.Parameters.AddWithValue("@TagName", array1[i]);
cmd.Parameters.AddWithValue("@TagValue", array2[i]);
cmd.ExecuteNonQuery();
cmd.Parameters = new SqlParameterCollection();
}
trans.Commit();
}
catch (SqlException e)
{
LogManager lm = new LogManager();
lm.WriteErrorTextLog(e, "Broken Manager - Final Inspection Broker");
lm.Dispose();
trans.Rollback();
}
catch (Exception e)
{
LogManager lm = new LogManager();
lm.WriteErrorTextLog(e, "Broken Manager - Final Inspection Broker");
lm.Dispose();
trans.Rollback();
}
finally
{
cn.Close();
}
私はまだ ADO.Net の内外をすべて学んでおり、SQL ストアド プロシージャ以外のトランザクションを扱ったことはありません。私はそれをXMLに入れ、すべてのループと挿入をストアドプロシージャ自体で実行できることを知っています。このルートも同様に機能するかどうかに興味があります。アドバイスをいただければ幸いです。