Ошибка в OleDbTransaction

Я делаю транзакцию с OleDb. Я не показываю, как я вычислил такие переменные, как finalQuantity и finalMoneyBuyer, потому что это не важно. Мой код таков:

    using(OleDbConnection con = DAL.GetConnection())
    {
        OleDbTransaction transaction = null;
        try
        {
            con.Open();
            transaction = con.BeginTransaction();

            if (realQuantity == quantity)
            {
                sql = "DELETE FROM item WHERE (id =" + id + ")";
            }
            else if (realQuantity > quantity)
            {
                sql = "UPDATE item SET quantity = " + finalQuantity + " WHERE (id = "+id+")";
            }
            OleDbCommand cmd = DAL.GetCommand(con, sql);
            cmd.Transaction = transaction;

            string sql2 = "UPDATE lol SET money = " + finalMoneyBuyer + " WHERE (UserName = '" + Session["username"] + "')";
            OleDbCommand cmd2 = DAL.GetCommand(con, sql2);
            cmd2.Transaction = transaction;

            string sql3 = "UPDATE lol SET money = " + finalMoneySeller + " WHERE (UserName = '" + seller + "')";
            OleDbCommand cmd3 = DAL.GetCommand(con, sql3);
            cmd3.Transaction = transaction;

            int num1 = cmd.ExecuteNonQuery();
            int num2 = cmd2.ExecuteNonQuery();
            int num3 = cmd3.ExecuteNonQuery();

            if(num1 == 0 || num2 == 0 || num3 == 0)
            {
                //No esperamos a que sea 0, asi que vamos a echar para atras todo lo que hicimos
                transaction.Rollback();
                //mandar error
                Response.Redirect("home.aspx?err=Error1");
            }
            else
            {
                transaction.Commit();
                Response.Redirect("home.aspx?err=Purchase was successful!");
            }
        }
        catch(OleDbException ex)
        {
            try
            {
                //algo malo paso, vamos a echar para atras todo lo que hicimos.
                transaction.Rollback();
                Response.Redirect("home.aspx?err=Error2");
            }
            catch{}
        }
    }

После запуска кода... я получаю эту ошибку: error

Я надеюсь, что вы можете помочь, спасибо.


person Pichi Wuana    schedule 12.06.2015    source источник
comment
Я новичок в транзакциях и взял информацию из этого ответа: Как сделать многие SQL-запросы транзакциями?   -  person Pichi Wuana    schedule 12.06.2015


Ответы (1)


Вы должны установить транзакцию для объектов команды:

cmd.Transaction = transaction;

и т.п.

person LInsoDeTeh    schedule 12.06.2015
comment
Подождите... Где именно? Извините, я немного новичок в этом. - person Pichi Wuana; 12.06.2015
comment
после OleDbCommand cmd = DAL.GetCommand(con, sql) и перед ExecuteNonQuery() - person LInsoDeTeh; 12.06.2015
comment
Спасибо. Теперь это прошло. Но каковы причины того, что транзакция не удалась? Он пошел в эту строку Response.Redirect("home.aspx?err=Error2"); - person Pichi Wuana; 12.06.2015
comment
Это похоже на исключение на вашем снимке экрана: когда у вас открыты транзакции в вашем соединении, вы должны указать каждой команде, которая выполняется в этом соединении, к какой транзакции она принадлежит. - person LInsoDeTeh; 12.06.2015
comment
Да, я сделал это сейчас. Я изменил свой код, чтобы сообщить cmd.Transaction = transaction . Проблема в том, что теперь он идет в улов, а Транзакция не делается. Я хотел бы это исправить. - person Pichi Wuana; 12.06.2015
comment
Давайте продолжим обсуждение в чате. - person Pichi Wuana; 12.06.2015