none
Linq to SQL - Desktop RRS feed

  • Pergunta

  • Olé pessoal, estou aqui tentando pesquisar um dado através de Linq no meu BD. Mas acontece que quando eu insiro o dado e a seguir tento pesquisar (clicando em um botão), ele não retorna uma resposta. Diante de todas as possibilidades que vi de erros, acho que o datacontext não esta atualizando os dados automaticamente quando são inseridos no BD, me obrigando a fechar e abrir o programa quando um novo dado é inserido para poder pesquisa-lo. O código que uso está aqui:

    public Link_Procurar(string assunto)
            {
                BancoLinksDataContext principal = new BancoLinksDataContext();
                
                try
                {
                    var resultado = from result in principal.Cadastros
                                                     where result.Assunto == assunto
                                                     select result;
    
                    foreach (var respostas in resultado)
                    {
                        MessageBox.Show("URL: " + respostas.URL, "Link - Resultado", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception exep)
                {
                    MessageBox.Show("Não foi possível encontrar resultados, verifique se a pesquisa esta correta.", "Link - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    Já tentei context.Refresh, mas não sei se estou fazendo certo, alguém tem alguma idéia?


    • Editado Lucas Borsatto quinta-feira, 23 de fevereiro de 2012 15:51 Erro de sintaxe
    quarta-feira, 22 de fevereiro de 2012 16:59

Respostas

  • Fernando, achei muito bom o código. Não sabia que podia fazer desta forma. Mas pelo que eu procurei aqui, não existe método ObjectDataContext.Table.Add() em ambiente desktop (e pelo que eu estou pesquisando, nem em ambiente web). Eu não necessito de usar uma referência especifica para conseguir acessar este método?

    Mas consegui o mesmo resultado com esse código:

    		BancoLinksDataContext principal = new BancoLinksDataContext();
                    Cadastro cadastro = new Cadastro();
                    cadastro.Nome = nome;
                    cadastro.URL = url;
                    cadastro.Assunto = assunto;
    
                    principal.Cadastros.InsertOnSubmit(cadastro);
                    principal.SubmitChanges();

    Mas muito obrigado por dar a dica, me ajudo muito!

    Abraço

    • Editado Lucas Borsatto sexta-feira, 24 de fevereiro de 2012 15:40 Correção
    • Marcado como Resposta Lucas Borsatto sexta-feira, 24 de fevereiro de 2012 15:50
    • Não Marcado como Resposta Lucas Borsatto sexta-feira, 24 de fevereiro de 2012 16:22
    • Marcado como Resposta Harley AraujoModerator sexta-feira, 2 de março de 2012 13:37
    sexta-feira, 24 de fevereiro de 2012 15:28

Todas as Respostas

  • Olá Lucas,

    Poderia postar o código que vc tem utilizado para incluir novos registros?

    O Entity Framework e o LINQ to SQL possuem um CACHE interno dos dados.

    É possível que vc esteja caindo em um cenário onde estes dados não estão atualizados, ou algum erro na hora de codificar a inclusão de registros esteja atrapalhando todo o processo.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    quinta-feira, 23 de fevereiro de 2012 02:31
  • SqlConnection conexao = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Lucas\\Desktop\\Lucas B\\Tutoriais\\Programação\\Programas de Teste\\Link\\Link\\BancoLinks.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
                
                string sql = "INSERT INTO Cadastros(Nome, URL, Assunto) VALUES(@Nome, @URL, @Assunto)";
                try
                {
                    SqlCommand comando= new SqlCommand(sql,conexao);
    
                    comando.Parameters.Add(new SqlParameter("@Nome", nome));
                    comando.Parameters.Add(new SqlParameter("@URL", url));
                    comando.Parameters.Add(new SqlParameter("@Assunto", assunto));
    
                    conexao.Open();
                    comando.ExecuteNonQuery();
                    conexao.Close();

    É este acima Fernando. Há algo errado com ele?

    • Editado Lucas Borsatto quinta-feira, 23 de fevereiro de 2012 17:58 Erro de sintaxe
    quinta-feira, 23 de fevereiro de 2012 15:50
  • Olá Lucas,

    Vc chegou a testa incluir os registros via LINQ ao invés de utilizar ADO.Net?

    Ao invés de utilizar o bloco acima, faça assim:

    Cadastro cad = new Cadastros();
    cad.Nome = nome;
    cad.Url = url;
    cad.Assunto = assunto;
    
    BancoLinksDataConntext dataCon = new BancoLinksDataConntext();
    dataCon.Cadastros.Add(cad);
    
    cataCon.SubmitChanges();

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    quinta-feira, 23 de fevereiro de 2012 19:58
  • Fernando, achei muito bom o código. Não sabia que podia fazer desta forma. Mas pelo que eu procurei aqui, não existe método ObjectDataContext.Table.Add() em ambiente desktop (e pelo que eu estou pesquisando, nem em ambiente web). Eu não necessito de usar uma referência especifica para conseguir acessar este método?

    Mas consegui o mesmo resultado com esse código:

    		BancoLinksDataContext principal = new BancoLinksDataContext();
                    Cadastro cadastro = new Cadastro();
                    cadastro.Nome = nome;
                    cadastro.URL = url;
                    cadastro.Assunto = assunto;
    
                    principal.Cadastros.InsertOnSubmit(cadastro);
                    principal.SubmitChanges();

    Mas muito obrigado por dar a dica, me ajudo muito!

    Abraço

    • Editado Lucas Borsatto sexta-feira, 24 de fevereiro de 2012 15:40 Correção
    • Marcado como Resposta Lucas Borsatto sexta-feira, 24 de fevereiro de 2012 15:50
    • Não Marcado como Resposta Lucas Borsatto sexta-feira, 24 de fevereiro de 2012 16:22
    • Marcado como Resposta Harley AraujoModerator sexta-feira, 2 de março de 2012 13:37
    sexta-feira, 24 de fevereiro de 2012 15:28