我已经设置了DateTime传递的变量,我需要从"GetQuantityInStock"存储过程中获取修改后的变量,以便在下一个请求中应用它.我怎么能做到这一点?

错误:使用未赋值的局部变量"delivered".

private void InsertQuery()
{
    var count =
            from order in showOrders
            group order by order.ProductArticleNumber into articles
            select new
            {
                ProductArticleNumber = articles.Key,
                Count = articles.Count(),
            };

    DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
    DateTime delivered;
    int id;

    if (cboPickUpPoints.SelectedValue != null)
    {
        int pickUpPoint = (int)cboPickUpPoints.SelectedValue;


        if (MessageBox.Show("Вы точно уверены в своём выборе? ", "Сообщение",
        MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            using (SqlConnection connectionString = new SqlConnection(Properties.Settings.Default.connectionString))
            {
                connectionString.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "GetCountArticles";
                cmd.Connection = connectionString;

                foreach (var items in count)
                {
                    cmd.Parameters.AddWithValue("@countArticles", items.Count);
                    cmd.Parameters.AddWithValue("@ProductArticleNumber", items.ProductArticleNumber);
                    cmd.ExecuteNonQuery();
                }

                SqlCommand cmd1 = new SqlCommand();
                cmd1.CommandType = CommandType.StoredProcedure;
                cmd1.CommandText = "GetQuantityInStock";
                cmd1.Connection = connectionString;

                foreach (var items in count)
                {
                    cmd1.Parameters.AddWithValue("@ProductArticleNumber", items.ProductArticleNumber);
                    int countArticles = (int)cmd1.ExecuteScalar();
                    if (countArticles > 3)
                    {
                        delivered = today.AddDays(3); //<-- The variable I need
                    }
                    else
                    {
                        delivered = today.AddDays(6); //<-- The variable I need
                    }
                }

                SqlCommand cmd2 = new SqlCommand();
                cmd2.CommandType = CommandType.StoredProcedure;
                cmd2.CommandText = "InsertOrder";
                cmd2.Connection = connectionString;

                cmd2.Parameters.AddWithValue("@OrderDate", today);
                cmd2.Parameters.AddWithValue("@OrderDeliveryDate", delivered); //<-- Error
                cmd2.Parameters.AddWithValue("@OrderPickupPoint", pickUpPoint);

推荐答案

您正在foreach语句体中初始化delivered,至少从编译器的Angular 来看,不能保证执行(如果count为空).

只需对其进行一些初始化:

DateTime delivered = DateTime.UtcNow;

或者以代码被初始化并在正确位置使用的方式重写代码.

而且,您计算每个批次的单个日期似乎有点奇怪,基本上它将导致只分析count中的最后一个项目的countArticles,这可能会产生不一致的结果,这取决于count中项目的顺序.如果您坚持使用存储过程,那么我建议重写GetCountArticlesProductArticleNumber以接受ID集合(例如,将table valued parameters用于SQL服务器),并在数据库端批量处理它们(即,ProductArticleNumber将变为MaxProductArticleNumber或类似的值)

还要注意的是,有人反对使用AddWithValue--参见AddWithValue is Evil

Csharp相关问答推荐

在实际上是List T的 IESEARCH上多次调用First()是否不好?

为什么我不能更改尚未设置的模拟对象属性的值?

Entity Framework Core 8 dbcontext—无法以多对多关系添加某些行'

如何定义EFCore中的多个穿透

实体框架核心中的ComplexType和OwnsOne有什么不同?

如何在页面重新加载后保持菜单切换状态

当用户右键单击文本框并单击粘贴时触发什么事件?

CS1660无法将lambda表达式转换为类型INavigationBase,因为它不是委托类型

反序列化私有成员

将内置的OrderedEumable&Quot;类设置为内部类有什么好处?

无法使用[FromForm]发送带有图像和JSON的多部分请求

为什么C#/MSBuild会自发地为不同的项目使用不同的输出路径?

在构造函数中传递C#函数以用作EventHandler委托的订阅服务器

为什么我在使用有效令牌的情况下仍未获授权?

如何在单击按钮后多次异步更新标签

删除MudRadio时,MudRadioGroup未 Select 正确的MudRadio

并发表更新.EF核心交易

如何使用LINQ在C#中填充列表列表?

无法通过服务控制台启动.NET Core 6.0服务(错误1053)

初始化具有EntityFrameworkCore和不同架构的数据库时引发System.MissingMethodExcept