В родительскую таблицу всегда вставляются повторяющиеся строки - PullRequest
0 голосов
/ 20 января 2019

У меня есть следующие коды с блоком транзакции. Когда я размещаю заказ, моя базовая таблица (TBL_T_Orders) всегда вставляет 2 одинаковые строки (повторяющиеся строки с разными OrderId). Таблица подробностей TBL_T_OrderItems правильно вставила элементы.

Мой код

public CartTotal InsertNewOrder(CartTotal cartTotal)
{
            try
            {
                con.Open();

                transaction = con.BeginTransaction();

                string orderQuery = @"INSERT INTO [dbo].[TBL_T_Orders] ([OrderCode],[OrderReceivedDate]) 
                                      OUTPUT INSERTED.OrderId
                                      VALUES (@OrderCode, @OrderReceivedDate)";
                cmd = db.GetSqlStringCommand(orderQuery);
                cmd.Transaction = transaction;

                db.AddInParameter(cmd, "OrderCode", DbType.Int32, cartTotal.OrderCode);
                db.AddInParameter(cmd, "OrderReceivedDate", DbType.DateTime,DateTime.Now);

                db.ExecuteNonQuery(cmd, transaction);

                int OrderId = (int)cmd.ExecuteScalar();

                foreach (var item in cartTotal.items)
                {
                    string orderItemsQuery = @"INSERT INTO [dbo].[TBL_T_OrderItems] ([OrderId], [ItemId]
                                               VALUES (@OrderId, @ItemId)";

                    cmd = db.GetSqlStringCommand(orderItemsQuery);
                    cmd.Transaction = transaction;

                    db.AddInParameter(cmd, "OrderId", DbType.Int32, OrderId);//temp
                    db.AddInParameter(cmd, "ItemId", DbType.String, item.ItemId);

                    db.ExecuteNonQuery(cmd, transaction);
                }

                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return cartTotal;
}

1 Ответ

0 голосов
/ 20 января 2019

Вы получаете повторяющиеся записи, потому что вы выполняете запрос дважды. Первый раз с db.ExecuteNonQuery, а затем второй раз с cmd.ExecuteScalar();.

Удалить первую db.ExecuteNonQuery строку. Тогда это будет отлично работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...