Search code examples
c#ms-access-2007

No error, but delete/update query not working in c#


I'm working on a project in which I am using an Access 2007 database (.accdb) instead of SQL Server. To perform CRUD operations, I'm using MS Access's query since my previous codes written using stored procedures. And I'm also using SQL transactions.

Here is my code:

public int OrderId { get; set; }
public string OrderDate { get; set; }
public int ServiceMode { get; set; }
public string DeliveryDate { get; set; }
public int ClientId { get; set; }
public int TotalQty { get; set; }
public decimal TotalAmount { get; set; }
public int Discount { get; set; }
public decimal DiscAmount { get; set; }
public decimal NetTotal { get; set; }
public decimal Advance { get; set; }
public decimal Due { get; set; }

 public bool Update(DataTable itemList)
 {
            using (var conn = new OleDbConnection(Sniper.ConnString))
            {
                conn.Open();

                using (var trans = conn.BeginTransaction())
                {
                    try
                    {
                        using (var cmd = new OleDbCommand())
                        {
                            cmd.Transaction = trans;
                            cmd.Connection = conn;
                            cmd.CommandType = CommandType.Text;
                            cmd.CommandText = string.Format("DELETE FROM OrderMaster WHERE OrderId={0}", OrderId);
                            cmd.ExecuteNonQuery();
                            cmd.CommandText = string.Format("DELETE FROM OrderDetails WHERE OrderId={0}", OrderId);
                            cmd.ExecuteNonQuery();
                            cmd.CommandText = string.Format("DELETE FROM OrderStatus WHERE OrderId={0}", OrderId);
                            cmd.ExecuteNonQuery();
                        }

                        using (var cmd = new OleDbCommand("qry_OrderMaster_Insert", conn))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Transaction = trans;
                            cmd.Parameters.AddWithValue("@OrderId", OrderId);
                            cmd.Parameters.AddWithValue("@OrderDate", OrderDate);
                            cmd.Parameters.AddWithValue("@ServiceMode", ServiceMode);
                            cmd.Parameters.AddWithValue("@DeliveryDate", DeliveryDate);
                            cmd.Parameters.AddWithValue("@ClientId", ClientId);
                            cmd.Parameters.AddWithValue("@TotalQty", TotalQty);
                            cmd.Parameters.AddWithValue("@TotalAmount", TotalAmount);
                            cmd.Parameters.AddWithValue("@Discount", Discount);
                            cmd.Parameters.AddWithValue("@DiscAmount", DiscAmount);
                            cmd.Parameters.AddWithValue("@NetTotal", NetTotal);
                            cmd.Parameters.AddWithValue("@Advance", Advance);
                            cmd.Parameters.AddWithValue("@Due", Due);
                            cmd.ExecuteNonQuery();
                        }

                        using (var cmd = new OleDbCommand("qry_OrderStatus_Insert", conn))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Transaction = trans;
                            cmd.Parameters.AddWithValue("@OrderId", OrderId);
                            cmd.Parameters.AddWithValue("@IsDelivered", 0);
                            cmd.Parameters.AddWithValue("@IsCancelled", 0);
                            cmd.ExecuteNonQuery();
                        }

                        foreach (DataRow row in itemList.Rows)
                        {
                            using (var cmd = new OleDbCommand("qry_OrderDetails_Insert", conn))
                            {
                                cmd.CommandType = CommandType.StoredProcedure;
                                cmd.Transaction = trans;
                                cmd.Parameters.AddWithValue("@OrderId", OrderId);
                                cmd.Parameters.AddWithValue("@ItemId", row["ItemId"].ToInt());
                                cmd.Parameters.AddWithValue("@Qty", row["Qty"].ToInt());
                                cmd.Parameters.AddWithValue("@UnitPrice", row["UnitPrice"].ToPrice());
                                cmd.Parameters.AddWithValue("@Service", row["Service"].ToString());
                                cmd.Parameters.AddWithValue("@Remarks", row["Remarks"].ToString());
                                cmd.Parameters.AddWithValue("@SI", row["SI"].ToString());
                                cmd.Parameters.AddWithValue("@TotalPrice", row["TotalPrice"].ToString());
                                cmd.ExecuteNonQuery();
                            }
                        }

                        trans.Commit();
                        return true;
                    }
                    catch (Exception)
                    {
                        trans.Rollback();
                        return false;
                    }
                }

This code executes without any error, but it doesn't delete the record as well as doesn't insert record as duplicate record.


Solution

  • I fixed the issue as paul said. The value of OrderId was invalid.