2015-01-25 2 views
0

Я огляделся вокруг stackoverflow, но я не могу найти ответ. Может быть, я не замечаю этого. Это мой код. после того, как первый, пока он продолжает идти обратно в то время цикла и после того, как я закрываю читатель она восходит к некоторому времени (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; 
+1

Я не понимаю этого после первого, пока он продолжает возвращаться к циклу while. Разве это не так, как работает оператор while? –

ответ

1

Вы закрываете соединение внутри while. Это косвенно закрыло бы всех читателей, следовательно, ошибку. В принципе: не делай этого. Я настоятельно рекомендую добавить using заявления вместо закрытия и try/catch, finally, и вырваться из цикла: break.

Я не уверен, почему у вас есть connectie.Close(); внутри цикла; возможно, вы добавили это из-за проблемы с «множественными активными читателями в связи». Если это так, вам нужно будет буферизовать информацию о том, что вы хотите сделать во время первого чтения, и выполнять только ожидающие команды, когда читатель будет готов. Или используйте несколько соединений.

+0

@Qun: Я согласен с замечаниями Марка о конкретной ошибке здесь. Тем не менее, код также кажется нарушенным другими способами. В первую очередь: 'if (ToeTeVoegenHoeveelheid

Смежные вопросы