C# 代码执行没有下降

C# 代码执行没有下降,c#,.net,C#,.net,我有一个下面的代码,它有奇怪的行为,关闭While循环后的代码行并没有执行。如果我在循环执行之前写这些行。我在这个问题上搜索了很多,但都失败了 if ((Convert.ToInt32(newDt.Rows[i]["qty"])) > (Convert.ToInt32(newDt1.Rows[i]["qty"]))) { k_batch = Convert.ToInt32(newDt.Rows[i]["batch_num"]);

我有一个下面的代码,它有奇怪的行为,关闭While循环后的代码行并没有执行。如果我在循环执行之前写这些行。我在这个问题上搜索了很多,但都失败了

if ((Convert.ToInt32(newDt.Rows[i]["qty"])) > (Convert.ToInt32(newDt1.Rows[i]["qty"])))
            {
                k_batch = Convert.ToInt32(newDt.Rows[i]["batch_num"]);
                label20.Content = k_batch.ToString();
                var dqty = (from row in Addition_result.AsEnumerable()      //retriving value from DataTable
                            where row.Field<int>("batch_num") == k_batch
                            select row.Field<int>("qty")).FirstOrDefault();

                dqty_y = Convert.ToInt32(dqty);
                label16.Content = dqty_y.ToString();


                    con.Open();

                    SqlCommand cmd1 = new SqlCommand("SELECT quantity,sold_qty,left_qty FROM batch WHERE id='" + k_batch + "'", con);
                    SqlDataReader batch_qty_details = null;
                    batch_qty_details = cmd1.ExecuteReader();

                    while (batch_qty_details.Read())
                    {
                        label16.Content = dqty_y.ToString();
                        batch_qty = Convert.ToInt32(batch_qty_details["quantity"]);
                        batch_left = Convert.ToInt32(batch_qty_details["left_qty"]);
                        batch_sold = Convert.ToInt32(batch_qty_details["sold_qty"]);
                    }  //code after this is not executing

                label18.Content = batch_left.ToString();
                label19.Content = batch_sold.ToString();
                label21.Content = dqty_y.ToString();
                label22.Content = batch_qty.ToString();
                label16.Content = batch_sold + dqty_y;
                label17.Content = batch_left - dqty_y;

                if (((batch_sold + dqty_y) <= batch_qty) && ((batch_left - dqty_y) >= 0))
                {
                    SqlCommand command = new SqlCommand("update batch set sold_qty=sold_qty+@soldqty2, left_qty=left_qty-@soldqty2 where id=@id2", con);
                    command.Parameters.AddWithValue("@soldqty2", Convert.ToInt32(dqty_y));
                    command.Parameters.AddWithValue("@id2", Convert.ToInt32(k_batch));
                    rexe = command.ExecuteNonQuery();
                }
                else
                {
                    MessageBox.Show("Please Check you Ordered Quantity !");
                }



                con.Close();

            }
        }

实际上有一个问题,连接状态已经打开,我正试图再次打开它。所以我使用了try-catch-block,它告诉我连接已经打开了。现在我已经改变了我的代码,它就在这里

if ((Convert.ToInt32(newDt.Rows[i]["qty"])) > (Convert.ToInt32(newDt1.Rows[i]["qty"])))
            {
                k_batch = Convert.ToInt32(newDt.Rows[i]["batch_num"]);
                label20.Content = k_batch.ToString();
                var dqty = (from row in Addition_result.AsEnumerable()      //retriving value from DataTable
                            where row.Field<int>("batch_num") == k_batch
                            select row.Field<int>("qty")).FirstOrDefault();

                dqty_y = Convert.ToInt32(dqty);
                label16.Content = dqty_y.ToString();

                try
                {
                    //con.Open();

                    SqlCommand cmd1 = new SqlCommand("SELECT quantity,sold_qty,left_qty FROM batch WHERE id='" + k_batch + "'", con);
                    SqlDataReader batch_qty_details = null;
                    batch_qty_details = cmd1.ExecuteReader();

                    while (batch_qty_details.Read())
                    {
                        label16.Content = dqty_y.ToString();
                        batch_qty = Convert.ToInt32(batch_qty_details["quantity"]);
                        batch_left = Convert.ToInt32(batch_qty_details["left_qty"]);
                        batch_sold = Convert.ToInt32(batch_qty_details["sold_qty"]);
                    }
                    con.Close();
                }
                catch(Exception EX)
                {
                    MessageBox.Show(EX.ToString());

                }
                label18.Content = batch_left.ToString();
                label19.Content = batch_sold.ToString();
                label21.Content = dqty_y.ToString();
                label22.Content = batch_qty.ToString();
                label16.Content = batch_sold + dqty_y;
                label17.Content = batch_left - dqty_y;


                if (((batch_sold + dqty_y) <= batch_qty) && ((batch_left - dqty_y) >= 0))
                {
                    con.Open();
                    SqlCommand command = new SqlCommand("update batch set sold_qty=sold_qty+@soldqty2, left_qty=left_qty-@soldqty2 where id=@id2", con);
                    command.Parameters.AddWithValue("@soldqty2", Convert.ToInt32(dqty_y));
                    command.Parameters.AddWithValue("@id2", Convert.ToInt32(k_batch));
                    rexe = command.ExecuteNonQuery();
                }
                else
                {
                    check_qty = -1;


                }






            }

在while循环中放置一个断点,查看它的作用。可能batch\u qty\u details.Read仍然返回true?这意味着您有很多行?您应该考虑所有的数据访问代码。以及业务逻辑。这是一个混乱的局面,将数据访问与UI关注点和域逻辑混合在一起,很难维护。您是否导致异常并提前退出?在while循环中放一个try/catch。对于这个问题的范围来说,似乎大部分都是不相关的,这使得问题变得比它应该的更复杂。试着把它归结为一个简单的问题。