Я так понимаю, что ты один экземпляр для работы с бд везде используешь. А у тебя я видел такие строки:
db.Close();
db.Open();
Т.е. если у тебя что то выполняется с использовантем этого экземпляра в одном месте - у тебя в другом беспощадно может закрыться соединение и ощибка вылезит не там, где ожидаешь