0

我在stackoverflow上环顾四周,但我真的找不到答案。也许我忽略了它。这是我的代码。在第一次之后它继续回到while循环,在我关闭阅读器后它又回到while(reader.read())

   public string VoegHoeveelheidToe(string HandmatigHoeveelheid, string ControleerBarcode)
      {
            string i = null;
            int Beginhoeveelheid;
            int ToeTeVoegenHoeveelheid;
            ToeTeVoegenHoeveelheid = Convert.ToInt32(HandmatigHoeveelheid);
            try
            {
                connectie.Open();
                OleDbDataReader reader = null;
                OleDbCommand command = new OleDbCommand("SELECT hoeveelheid from Voorraad,Product Where Voorraad.Barcode = Product.Barcode AND Voorraad.Barcode = '" + ControleerBarcode + "'", connectie);
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Beginhoeveelheid = reader.GetInt32(0);
                    ToeTeVoegenHoeveelheid = Beginhoeveelheid + Convert.ToInt32(HandmatigHoeveelheid);
                    if(ToeTeVoegenHoeveelheid < Beginhoeveelheid)
                    {
                        i = Convert.ToString(3);
                    }
                    else
                    {
                        connectie.Close();
                        try
                        {
                            connectie.Open();
                            OleDbCommand command1 = new OleDbCommand();
                            command1.Connection = connectie;
                            string query = "Update Voorraad set hoeveelheid = " + ToeTeVoegenHoeveelheid + " Where barcode='" + ControleerBarcode + "'";
                            command1.CommandText = query;
                            command1.ExecuteNonQuery();
                            i = Convert.ToString(1);
                            connectie.Close();                                
                        }
                        catch (Exception)
                        {
                            i = Convert.ToString(2);
                        }

                    }
                }

            }
            catch (Exception )
            {
                i = Convert.ToString(2);
            }
            connectie.Close(); return i;
4

1 回答 1

1

您正在关闭while. 这将隐式关闭任何阅读器,因此会出现错误。基本上:不要那样做。我强烈建议添加using语句而不是关闭 and try/ catch, finally, 和跳出循环:break.

我不知道为什么你有connectie.Close();循环内部;也许你补充说,因为“连接上的多个活跃读者”问题。如果是这种情况,您将需要在第一个阅读器期间缓冲有关您想要执行的操作的信息,并且仅在阅读器完成时执行待处理的命令。或者使用多个连接。

于 2015-01-25T12:24:12.530 回答