简体   繁体   中英

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.

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

You should not use "string.format". You should named parameters. And you could write a basic validator.

if(this.OrderID <= 0)
{
throw new ArgumentOutOfRangeException("Please provide an OrderID");
}

OleDbCommand Command = new OleDbCommand();
Command.Connection = Connection;

OleDbParameter paramOrderId = new OleDbParameter();
Parameter1.OleDbType = OleDbType.VarChar;
Parameter1.ParamterName = "@OrderId";
Parameter1.Value = this.OrderID;


Command.Parameters.Add(paramOrderId );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM