public SalesOrderHeaderCollection GetAllSalesOrderHeadersDynamicCollection(string whereExpression, string orderBy)
        {
            IDBManager dbm = new DBManager();
            SalesOrderHeaderCollection cols = new SalesOrderHeaderCollection();
            int id = 0;

            try
            {
                dbm.CreateParameters(2);
                dbm.AddParameters(0, "@WhereCondition", whereExpression);
                dbm.AddParameters(1, "@OrderByExpression", orderBy);
                IDataReader reader = dbm.ExecuteReader(CommandType.StoredProcedure, "SelectSalesOrderHeadersDynamic");

                while (reader.Read())
                {
                    SalesOrderHeader SOH = new SalesOrderHeader();
                    SOH.SalesOrderID = Int32.Parse(reader["SalesOrderID"].ToString());
                    id                      = SOH.SalesOrderID;
                    SOH.OrderDate           = DateTime.Parse(reader["OrderDate"].ToString());
                    SOH.DueDate             = DateTime.Parse(reader["DueDate"].ToString());
                    SOH.ShipDate            = DateTime.Parse(reader["ShipDate"].ToString());
                    SOH.Status              = Byte.Parse(reader["Status"].ToString());
                    SOH.OnlineOrderFlag     = bool.Parse(reader["OnlineOrderFlag"].ToString());
                    SOH.SalesOrderNumber    = reader["SalesOrderNumber"].ToString();
                    SOH.PurchaseOrderNumber = reader["PurchaseOrderNumber"].ToString();
                    SOH.CustomerID          = Int32.Parse(reader["CustomerID"].ToString());
                    SOH.SalesPersonID       = Int32.Parse(reader["SalesPersonID"].ToString());
                    if (reader["BillToAddressID"] != DBNull.Value)
                    {
                        SOH.BillToAddressID = Int32.Parse(reader["BillToAddressID"].ToString());
                    }
                    else
                    {
                        SOH.BillToAddressID = 0;
                    }
                    if (reader["ShipToAddressID"] != DBNull.Value)
                    {
                        SOH.ShipToAddressID = Int32.Parse(reader["ShipToAddressID"].ToString());
                    }
                    else
                    {
                        SOH.ShipToAddressID = 0;
                    }
                    SOH.ShipMethodID    = Int32.Parse(reader["ShipMethodID"].ToString());
                    SOH.PaymentMethodID = Int32.Parse(reader["PaymentMethodID"].ToString());
                    SOH.CurrencyRateID  = Int32.Parse(reader["CurrencyRateID"].ToString());
                    SOH.SubTotal        = decimal.Parse(reader["SubTotal"].ToString());
                    SOH.TaxAmt          = decimal.Parse(reader["TaxAmt"].ToString());
                    SOH.Freight         = decimal.Parse(reader["Freight"].ToString());
                    SOH.TotalDue        = decimal.Parse(reader["TotalDue"].ToString());
                    SOH.Comment         = reader["Comment"].ToString();
                    SOH.ModifiedDate    = DateTime.Parse(reader["ModifiedDate"].ToString());
                    cols.Add(SOH);
                }
            }
            catch (Exception ex)
            {
                log.Write(ex.Message, "GetAllSalesOrderHeadersDynamicCollection, SalesOrderID:" + id.ToString());
                throw (ex);
            }
            finally
            {
                dbm.Dispose();
            }
            return(cols);
        }