Я разрабатываю настольное приложение с использованием VS.net и SQL Server. В одной из форм я использую Transaction Scope. Код выглядит следующим образом: -
// Код конструктора
InitializeComponent();
ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["dbConSQLServerExp"].ConnectionString;
connectionString2 = System.Configuration.ConfigurationManager.ConnectionStrings["dbConSQLServerExp"].ConnectionString;
// Кнопка сохранения кода
string sql1 = @"SELECT sub_id FROM TABLE1 WHERE c_id=@c_id";
try
{
using (TransactionScope scope = new TransactionScope())
{
using (SqlConnection con1 = new SqlConnection(connectionString))
{
con1.Open();
using (SqlCommand cmd1 = new SqlCommand(sql1, con1))
{
cmd1.Parameters.Add("@c_id", SqlDbType.Int).Value = clsId;
cmd1.CommandType = CommandType.Text;
using (SqlDataReader rdr1 = cmd1.ExecuteReader())
{
while (rdr1.Read())
{
string sql2 = @"INSERT INTO TABLE2(casm_cls_id,casm_ass_id,casm_subj_text,casm_subj_id,casm_subj_mm)
VALUES(@casm_cls_id,@casm_ass_id,@casm_subj_text,@casm_subj_id,@casm_subj_mm)";
using (SqlConnection con2 = new SqlConnection(connectionString2))
{
con2.Open();
using (SqlCommand cmd2 = new SqlCommand(sql2, con2))
{
cmd2.Parameters.Add("@casm_cls_id", SqlDbType.Int).Value = clsId;
cmd2.Parameters.Add("@casm_ass_id", SqlDbType.Int).Value = assId;
cmd2.Parameters.Add("@casm_subj_text", SqlDbType.VarChar, 20).Value = lvMapList.Items[row].SubItems[4].Text;
cmd2.Parameters.Add("@casm_subj_id", SqlDbType.Int).Value = Convert.ToInt32(rdr1["sub_id"].ToString());
cmd2.Parameters.Add("@casm_subj_mm", SqlDbType.Int).Value = Convert.ToInt32(txtMaxMarks.Text.Trim());
cmd2.CommandType = CommandType.Text;
cmd2.ExecuteNonQuery();
}
}
}
}
}
scope.Complete();
MessageBox.Show("Records added", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
catch (TransactionAbortedException tex)
{
MessageBox.Show("1-1--->>" + tex.Message);
}
catch (SqlException ex)
{
MessageBox.Show("1-2--->>" + ex.Message);
}
Я сталкиваюсь с ошибкой в
con2.Open();
Сообщение об ошибке просто говорит о том, что транзакция прервана.
Может кто-нибудь объяснить, что я делаю не так или как это правильно сделать?