Значения не вставлены в базу данных SQL Server - PullRequest
0 голосов
/ 28 октября 2018

У меня действительно интересный случай: в двух процессах покупки я частично показываю общую стоимость заказа и цены доставки.

Это частичное представление отображается действием ShowCartDiscountsPrices.В конце мне нужно вставить используя Entity Framework в базу данных MinDeliveryPrice, MinDeliveryPriceDDS, DeliveryPrice, DeliveryPriceDDS.

Странная проблема состоит в том, что в двух случаях на прошлой неделе в моей базе данных SQL Server у меня было значение только для DeliveryPrice, И ЧТО-ТО ДРУГИЕ ТРИ КОЛОННЫ равны нулю в моей базе данных SQL Server.

И когда я смотрю на проблему и делаю заказ с теми же статьями, например, через час после этого все в порядке, и все четыре столбца заполнены, и за этот период никто не внес никаких изменений в базу данных.,

Мне интересно, в чем может быть проблема, могу ли я написать какой-нибудь сценарий для регистрации, чтобы увидеть, если какие-то ошибки происходят в SQL Server или IIS, может быть?

public ActionResult ShowCartDiscountsPrices(OrderDiscountPriceModel model, bool? ischange, int? deliverypreference)
{
    var cart = ShoppingCart.GetCart(WebsiteContext.CurrentUser != null ? (int?)WebsiteContext.CurrentUser.UserID : null);  

    decimal mindeliveryprice = 0;
    decimal mindeliverypricedds = 0;

    if (deliverypreference != null || Session["DeliveryPreference"] != null)
    {
        var parsedelprice = deliverypreference.HasValue ? deliverypreference.Value == 1 ? Decimal.TryParse(Settings.GetSettingByName("Eshop_SpeedyMinDeliveryPrice"), out mindeliveryprice) :Decimal.TryParse(Settings.GetSettingByName("Eshop_HomeMinDeliveryPrice"), out mindeliveryprice) : Decimal.TryParse(Session["MinDeliveryPrice"].ToString(), out mindeliveryprice );

        var parsedelpricedds = deliverypreference.HasValue ? deliverypreference.Value == 1 ? Decimal.TryParse(Settings.GetSettingByName("Eshop_SpeedyMinDeliveryPriceDDS"), out mindeliverypricedds) : Decimal.TryParse(Settings.GetSettingByName("Eshop_HomeMinDeliveryPriceDDS"), out mindeliverypricedds) : Decimal.TryParse(Session["MinDeliveryPriceDDS"].ToString(), out mindeliverypricedds );

        decimal deliveryprice;
        decimal deliverypricedds;

        ShoppingCartHelper.CalculateArticlesDeliveryPrice(mindeliveryprice, mindeliverypricedds, cart.ComputeTotalTransport(), cart.ComputeTotalTransportDDS(), out deliveryprice, out deliverypricedds);

        model.DeliveryPrice = deliveryprice;
        model.DeliveryPriceDDS = deliverypricedds;
        model.DeliveryPreference = deliverypreference.HasValue ? deliverypreference.Value : (int)Session["DeliveryPreference"];
        model.MinDeliveryPrice = mindeliveryprice;
        model.MinDeliveryPriceDDS = mindeliverypricedds;
        model.FinalSum += deliverypricedds;
    }
    else
    {
        if (isFromLastStep != null && bool.Parse(isFromLastStep.ToString()) == true)
            ViewBag.IncludeDelivery = true;
    }            

    if (deliverypreference != null)
    {
            Session["DeliveryPreference"] = deliverypreference;
            Session["MinDeliveryPrice"] = mindeliveryprice;
            Session["MinDeliveryPriceDDS"] = mindeliverypricedds;
    }

    ViewData.TemplateInfo.HtmlFieldPrefix = "OrderDiscoutPrice";
    return PartialView("_CartDiscountsPrices", model);
}

А вот моивспомогательные функции, которые выполняют только перебор коллекции со статьями и рассчитывают общую стоимость доставки.

 public decimal ComputeTotalTransport()
        {
            decimal totalarticletransport = 0;                
            decimal articletransport;
            foreach (var article in lineCollection)
            {
                if (decimal.TryParse(article.Article.Transport.ToString(), out articletransport))
                {
                    totalarticletransport += article.Article.Quantity * articletransport;
                    articletransport = 0;
                }
            }
            return totalarticletransport;
        }
public decimal ComputeTotalTransportDDS()
        {
            decimal totaltransportdds = 0;           
            decimal articletransportdds;
            foreach (var article in lineCollection)
            {
                if (decimal.TryParse(article.Article.TransportDDS.ToString(), out articletransportdds))
                {
                    totaltransportdds += article.Article.Quantity * articletransportdds;
                    articletransportdds = 0;
                }
            }
            return totaltransportdds;
        }

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Здравствуйте, обещаю, что добавлю код в свой ответ, но на самом деле проблема оказалась в перезапуске сервера IIS.

0 голосов
/ 30 октября 2018

Я хочу предложить вам расширить выражение if еще на один шаг, как показано ниже, чтобы проверить, больше ли значение сеанса, чем 0, как показано ниже.

if (Convert.ToString(deliverypreference) != "" && Convert.ToString(Session["DeliveryPreference"]) != "" && Convert.ToDecimal(deliverypreference) > 0 && Convert.ToDecimal(Session["DeliveryPreference"]) > 0)
    { 
       //Your insert logic as you have written.
    }

Как вы, возможно, знаете, иногда ваша переменная сеанса может быть не пустой или пустой строкой, но значение в сеансе равно 0. В этом случае ваш код будет выполняться, но данные будут вставлены неправильно.

Второй обходной путь. Я хочу предложить вам отключить разрешение пустого значения в столбце Sql Server, изменив таблицу в режиме конструктора.

Надеюсь, это поможет вам.

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