-1

Estou aprendendo a usar sqlite.net no Xamarin, mas na hora de editar um item não está funcionando, eu depurei o código e dei um breakpoint no EditItens() e vi que os valores passados ao conexao.Query<Itens> estão corretos, mas os recebidos na variável Teste abaixo continuam os mesmo de anteriormente, estou errando algo na hora de editar os valores no sqlite? Também pode ter algo errado no GetItens(), mas acho meio difícil porque ele funciona normalmente quando usado para pegar os valores e mostrar no ListView da MainActivity. Abaixo os métodos citados

string pasta = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
public List<Itens> GetItens()
    {
        try
        {
            var conexao = new SQLiteConnection(System.IO.Path.Combine(pasta, "Itens.db3"));
            return conexao.Table<Itens>().ToList();
        }
        catch (Exception)
        {
            return null;
        }
    }

public bool EditItens(Itens itens)
    {
        try
        {
            var conexao = new SQLiteConnection(System.IO.Path.Combine(pasta, "Itens.db3"));
            conexao.Query<Itens>("UPDATE Itens set Nome=?,Preco=? Where Id=?", itens.Nome, itens.Preco, itens.Id);
            Teste = GetItens();
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

Se puderem me falar onde posso encontrar o pasta, "Itens.db3" pelo Explorador de arquivos do Windows, vai ajudar também porque posso verificar se o item realmente não está sendo editado.

2
  • Não consegui resolver, mas reescrevi outro projeto do zero e o erro não aconteceu, vou deixar o projeto aqui pra analisar futuramente pq ainda n entendi pq não ia, mas ao menos sei que "entendi" sqlite
    – underfilho
    Commented 14/10/2017 às 16:56
  • Consegui resolver, o erro era no Id passado, eu já pegava o Id quando fazia o GetItens() (em outra parte do código), mas mesmo assim eu igualava de novo, acho que de algum jeito isso causou o erro, percebi isso quando comecei o outro projeto, agr estou com dois projetos bem parecidos e ambos funcionando. O bom é q fixei o conteúdo realmente
    – underfilho
    Commented 15/10/2017 às 4:45

1 Resposta 1

1

Anderson, utilize isso na atualização dos dados:

var conexao = new SQLiteConnection(System.IO.Path.Combine(pasta, "Itens.db3"));
            conexao.Execute("UPDATE Itens set Nome=?,Preco=? Where Id=?", 
itens.Nome, itens.Preco, itens.Id);

Opcional e preferencialmente, já que você tem o objeto itens, use isso:

conexao.Update(itens);

Seu banco de dados vai estar localizado no smartphone, na pasta que foi definida em

var conexao = new SQLiteConnection(System.IO.Path.Combine(pasta, "Itens.db3"));
6
  • eu tentei esses modelos e também não deu certo, o pior é q tentei a mesma linha de código em um projeto menor e deu certo, apenas aqui não deu certo, eu atualizei a pergunta com o endereço da variável pasta, tem como me dizer onde fica aquilo? Se eu conseguir saber com certeza se está editando ou não pode facilitar a resolução
    – underfilho
    Commented 14/10/2017 às 0:31
  • O GetItens() está retornando algum valor válido? Se esse mesmo trecho dá certo em outra aplicação, verifique as declarações anteriores das variáveis fora desse escopo, por exemplo, verifique se está sendo chamado o conexao.CreateTable<T>. Commented 14/10/2017 às 1:10
  • Sobre verificar a pasta, coloque um Console.WriteLine(path) na aplicação e verifique no output do seu Visual Studio. Você pode tentar acessar através de um client no celular se a pasta for visível, ou através da solução da resposta do Andy nesse outro post: stackoverflow.com/questions/19194576/… Commented 14/10/2017 às 1:13
  • o código q eu estou criando serve tanto para escrever, quanto editar e apagar, se eu adiciono algum Item ele atualiza normalmente, se eu apago ele atualiza normalmente, mas quando eu edito, mesmo não retornando exceção alguma, ele continua intacto, vou tentar pegar o mesmo código de editar e de pegar itens e simplificar pra ver se o erro continua, e sobre as pastas eu estou dando uma olhada nesse link q me mandou
    – underfilho
    Commented 14/10/2017 às 13:42
  • 1
    Como você está estudando xamarin ainda é válido reescrever o projeto pra "treinar", tente utilizar os métodos com objetos do SQLite, isso vai te ajudar quando precisar utilizar herança em repositórios genéricos. Commented 14/10/2017 às 14:31

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .