Durante uma aula de Windows Forms na Qualiti, pretendia fazer uma demonstração simples: carregar visualmente um DataGridView com uma tabela do BD, alterar o grid e depois persistir as alterações no banco invocando o método Update do TableAdapter gerado.
Como não havia SQL Server disponível no momento, utilizei um banco Access (.mdb). Para minha surpresa, a demo não funcionou! Após clicar no botão, fechar e rodar a aplicação novamente, o grid se mostrava igual ao original, não atualizado, e o que é pior: nenhuma mensagem de erro havia sido exibida em nenhum momento.
Em casa, fui tirar o problema a limpo: criei a aplicação abaixo, em que o primeiro grid é alimentado por um .mdb e o segundo pelo SQL Server.

Os dois botões de cima possuem o comportamento idêntico de atualizar as suas respectivas bases. Ao rodar a demonstração: o mesmo erro aconteceu: a atualização aparentava ocorrer normalmente na primeira execução da aplicação, mas na segunda execução o grid Access estava desatualizado. Para piorar, o grid do SQL Server era atualizado sem problemas.
Bug no gerador de código do Visual Studio .NET para bancos Access? Depois de quebrar um pouco a cabeça, descobri que na verdade não se trata de um bug, mas de uma "pegadinha" do VS.NET.
Explicando melhor: quando você adiciona uma conexão a um banco Access, é dada a opção de incluir o arquivo .mdb na solução, o que sempre aceitei ingenuamente. Entretanto, quando a aplicação é executada, o .mdb que está no diretório do projeto é copiado para a pasta de output da solução (bin\Debug). O botão que atualiza o banco Access estava sim fazendo sua tarefa com sucesso, mas ao rodar a aplicação novamente via VS.NET, todo o conteúdo da pasta de output é sobrescrito (como esperado), o que ocasiona a troca do .mdb atualizado pelo antigo, que estava no diretório da solução (como não esperado).
Para resolver o problema, basta clicar no arquivo .mdb da solução, dentro do Solution Explorer, e na propriedade "Copy to Output Directory" setar "Copy if newer". Assim você não cai na pegadinha, mas também não fica feliz por pensar que encontrou um bug no VS.NET.
[]s
-- AFurtado