Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无错误,但删除/更新查询在c中不起作用#_C#_Ms Access 2007 - Fatal编程技术网

C# 无错误,但删除/更新查询在c中不起作用#

C# 无错误,但删除/更新查询在c中不起作用#,c#,ms-access-2007,C#,Ms Access 2007,我正在从事一个项目,在该项目中,我使用的是Access 2007数据库(.accdb),而不是SQL Server。为了执行CRUD操作,我使用MS Access的查询,因为我以前的代码是使用存储过程编写的。我还使用SQL事务 这是我的密码: public int OrderId { get; set; } public string OrderDate { get; set; } public int ServiceMode { get; set; } public string Delive

我正在从事一个项目,在该项目中,我使用的是Access 2007数据库(
.accdb
),而不是SQL Server。为了执行CRUD操作,我使用MS Access的查询,因为我以前的代码是使用存储过程编写的。我还使用SQL事务

这是我的密码:

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;
                    }
                }

此代码执行时没有任何错误,但它不会删除记录,也不会将记录作为重复记录插入。

正如paul所说,我修复了这个问题。OrderId的值无效。

不应使用“string.format”。您应该使用命名参数。 你可以写一个基本的验证器

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 );

if(this.OrderID)我看不到您在哪里设置了
OrderID
,可能是您中断了代码并确认它设置为有效值了?非常感谢,您救了我的命。您正在混合DTO代码和方法。此代码无法进行单元测试。我将分离DTO部分(标量属性)对于DAL方法。