Ошибка выброса второго объекта подключения внутри области транзакции - PullRequest
0 голосов
/ 24 июня 2019

Я разрабатываю настольное приложение с использованием 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();

Сообщение об ошибке просто говорит о том, что транзакция прервана. Может кто-нибудь объяснить, что я делаю не так или как это правильно сделать?

...