none
Visualizar pesquisa em um DataGridView RRS feed

  • Pergunta

  • to tentando exibir o resultado de uma pesquisa em um DataGridView mas ta acontecendo um erro
    o codigo e o seguinte

    Classes.CadastroUsuarios.ClasseControleCadastroUsuarios controle = new Classes.CadastroUsuarios.ClasseControleCadastroUsuarios();
    OdbcCommand sql = new OdbcCommand();
    sql = controle.pesquisar(toolStripComboBoxCampoPesquisar.Text, toolStripTextBoxPesquisar.Text);
    if (sql != null)
    {
    OdbcConnection conexao = new OdbcConnection("Dsn=PostgreSQL30;Server=localhost;Database=ProjetoGerenciador;User ID=BrunoAlisson;Password=BrunoAlisson;");
               OdbcDataAdapter da = new OdbcDataAdapter(sql.CommandText, conexao);
               DataSet ds = new DataSet();
               try
               {
    conexao.Open();
               da.Fill(ds, "\"Usuario\"");
    dataGridViewCadastroUsuarios.DataSource = ds.Tables["\"Usuario\""];
    da.Update(ds, "\"Usuario\"");
    usuarioBindingSource.DataSource = ds.Tables["\"Usuario\""];
    }
    finally
    {
               conexao.Close();
    }
    }
    else
    {
    MessageBox.Show("Nada encontrado!", "Resultado", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }



    depois uso uma classe de persistencia para montar a sql


    OdbcConnection conexao = new OdbcConnection("Dsn=PostgreSQL30;Server=localhost;Database=ProjetoGerenciador;User ID=BrunoAlisson;Password=BrunoAlisson;");
    OdbcCommand sql = null;
    switch (campo)
                {
                    case("Código"):
                        sql = new OdbcCommand ("Select * from \"Usuario\" where \"id\" = (?);", conexao);
                        sql.Parameters.Add("@\"id\"", OdbcType.VarChar).Value = texto;
                        return sql;
                        //da = new OdbcDataAdapter(sql.CommandText, conexao);
                        //return da;
                        break;
                    case ("Nome"):
                        sql = new OdbcCommand("Select * from \"Usuario\" where \"nome\" = (?);", conexao);
                        sql.Parameters.Add("@\"nome\"", OdbcType.VarChar).Value = texto;
                        return sql;
                        //da = new OdbcDataAdapter(sql.CommandText, conexao);
                        //return da;
                        break;
                    case ("Login"):
                        sql = new OdbcCommand("Select * from \"Usuario\" where \"login\" = (?);", conexao);
                        sql.Parameters.Add("@\"login\"", OdbcType.VarChar).Value = texto;
                        return sql;
                        //da = new OdbcDataAdapter(sql.CommandText, conexao);
                        //return da;
                        break;
                    case ("Usuário Responsável"):
                        sql = new OdbcCommand("Select * from \"Usuario\" where \"usuarioResponsavel\" = (?);", conexao);
                        sql.Parameters.Add("@\"usuarioResponsavel\"", OdbcType.VarChar).Value = texto;
                        return sql;
                        //da = new OdbcDataAdapter(sql.CommandText, conexao);
                        //return da;
                        break;
                    default:
                        return sql;
                }



    e o erro q acontece e o seguinte:

    {"ERROR [07002] The # of binded parameters < the # of parameter markers"}

    • Editado BrunoAlisson sexta-feira, 30 de janeiro de 2015 17:52
    quinta-feira, 22 de janeiro de 2009 17:32

Todas as Respostas

  • Pelo jeito é um bug do driver ODBC:

     

    http://markmail.org/message/puizlyxosy3d4mrm

     

    Por que você não usa Npgsql?
    sexta-feira, 23 de janeiro de 2009 23:12
  • Bruno,

    este erro ocorre por que quando o .net tenta fazer a associação dos atributos "bindados" com o seu comando de insert ou update, ele encontra menos binds do que os parametros da query. Estou tendo essa dificuldade agora por que estou com um checkbox com valor "S" ou "N" (que não posso mudar o tipo da coluna no banco) e para mostrar os valores desses checkboxes na tela eu uso este comando:

    <%# "S".Equals(Eval("atualizado_firmware")) %>

     

    No seu caso, use o mesmo número de binds dos parâmetros que vc tem na sua query...

     

    No meu caso, alguém tem alguma idéia? Sad

     

    Abrax e bons códigos...

    quinta-feira, 29 de janeiro de 2009 16:28
  • angus
    ja tentei com o npgsql
    adiciono a referencia pra dll e a using mas qndo compila nao reconhece os tipos, como npgsqlcommand
    quinta-feira, 29 de janeiro de 2009 21:31