iF ~ 0 Denunciar post Postado Março 25, 2008 Olá galerinha. Sempre que a coisa aperta lá viemos nós buscando solução.... Pois bem, desta vez é o seguinte: Quero realizar uma consulta em um banco e mostrar somente os dados filtrados. Na minha página principal tenho uma TextBox com a ID "txtNome". Nesta txtNome eu escrevo o nome da pessoa que quero procurar no banco. Então clico no botão "btnConsultar". Eis meu código: protected void btnConsulta_Click(object sender, EventArgs e) { string strStringConn = @"Data Source=.\SQLEXPRESS;Initial Catalog=DevelopmentDB;Integrated Security=True"; string strStringComando = "SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome=@nome"; SqlConnection objSqlConn = new SqlConnection(strStringConn); SqlCommand objSqlComando = new SqlCommand(strStringComando, objSqlConn); SqlDataReader leitura = null; objSqlComando.Parameters.Add("@nome", SqlDbType.NVarChar); objSqlComando.Parameters["@nome"].Value = txtNome.Text.ToLower(); try { objSqlConn.Open(); if (objSqlConn.State == ConnectionState.Open) { leitura = objSqlComando.ExecuteReader(); while (leitura.Read()) { gridLeitura.DataSource = leitura; //gridLeitura.DataBind(); } gridLeitura.DataBind(); leitura.Close(); objSqlConn.Close(); } } catch (Exception ex) { lblExcecao.Text = ex.ToString(); objSqlConn.Close(); } } Desta forma nada é exibido. Se eu faço assim: protected void btnConsulta_Click(object sender, EventArgs e) { string strStringConn = @"Data Source=.\SQLEXPRESS;Initial Catalog=DevelopmentDB;Integrated Security=True"; string strStringComando = "SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome=@nome"; SqlConnection objSqlConn = new SqlConnection(strStringConn); SqlCommand objSqlComando = new SqlCommand(strStringComando, objSqlConn); SqlDataReader leitura = null; objSqlComando.Parameters.Add("@nome", SqlDbType.NVarChar); objSqlComando.Parameters["@nome"].Value = txtNome.Text.ToLower(); try { objSqlConn.Open(); if (objSqlConn.State == ConnectionState.Open) { leitura = objSqlComando.ExecuteReader(); while (leitura.Read()) { gridLeitura.DataSource = leitura; gridLeitura.DataBind(); } //gridLeitura.DataBind(); leitura.Close(); objSqlConn.Close(); } } catch (Exception ex) { lblExcecao.Text = ex.ToString(); objSqlConn.Close(); } } Só a primeira linha da minha tabela do meu banco é exibida qundo eu faço a consulta correta. Não sei como fazer para quando eu, por exemplo, consultar pelo nome "João", apareçam todos os "joães" do banco. Toda ajuda é bem vinda http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Março 25, 2008 Para você escrever João e trazer todos os registros como "jões" acredito que seja muito complexo e muito pouco usado, li pouca coisa sobre isso o que é normal, é você escrever Jo e trazer todos os registros que comece com o Jo. Para isto basta usar o Like. Seu select ficará assim: SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome LIKE 'Jo%' Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
iF ~ 0 Denunciar post Postado Março 26, 2008 Mmm obrigado quintelab, a explicação foi muito útil. Mas meu real problema é que eu qro fazer uma busca por nome. Um nome qlquer. Pode ser "joao", "jose", "maria", "etc". Esse nome pode aparecer mais de uma vez na tabela e eu qro todos estes registros e seus dados relacionados. Isso não está acontecendo. No código q eu postei acima qndo eu coloco o "gridLeitura.DataBind();" dentro do bloco "while", somente o primeiro registro da minha tabela é exibido, não importa qual foi minha busca. Exemplo do que esta acontecendo: Na primeira linha da coluna "Nome" da minha tabela eu tenho o resgistro "maria". Se eu digito na TextBox e procuro por "joao" não é exibido nada (sim, eu tenho o registro "joao" na tabela). Mas se eu digito "maria" e realizo a consulta as colunas q eu seleciono aparecem. Mas somente o primeiro registro "maria" eh mostrado. E o que eu qro é que sejam mostradas todas as informações de TODOS os registros que tenham na coluna "Nome" o nome "maria". Bom...Não sei se fui bem claro, acho q nao huaahua. Se puderem ajudar ficarei muito grato. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Março 26, 2008 Entendi em partes, mas bem. Primeira coisa, não existe a necessidade de um while para montar uma grid. Para montar uma GridView basta: SqlConnection con = new SqlConnection(@"Data Source=QUINTELAB\SQLEXPRESS;Initial Catalog=Teste;User ID=sa; Pwd=senha;"); con.Open(); SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM MERCADORIAS", con); DataSet ds = new DataSet(); da.Fill(ds, "MERCADORIAS"); da.Dispose(); con.Close(); Repare que só precisei de um SqlDataAdapter e um DataSet, e a quantidade de resgistros que o meu select retorna vai ser o que vai aparecer na grid. Acredito que seu problema esteja naquele while e não é necessário. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
iF ~ 0 Denunciar post Postado Março 26, 2008 Pode ser o while mesmo. Mas ele é necessário para ler linha por linha da tabela, já que não estou utilizando um DataAdapter. E nem posso utilizar um. Tenho que fazer em um "Ambiente Conectado", ou seja, tenho que utilizar o DataReader. Obrigado de novo quintelab http://forum.imasters.com.br/public/style_emoticons/default/grin.gif . Se tiver alguma noção de como fazer em um ambiente conectado ficarei muito grato. E se mais alguém souber qualquer coisa que possa me auxiliar será de grande ajuda. Edição --------------------------- Nada melhor que muita perseverança, cabeça dura, teimosia e uma caneca de um bom café! Funcionou da seguinte forma: protected void btnConsulta_Click(object sender, EventArgs e) { string strStringConn = @"Data Source=.\SQLEXPRESS;Initial Catalog=DevelopmentDB;Integrated Security=True"; string strStringComando = "SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome=@nome"; string strNome = txtNome.Text.ToLower(); SqlConnection objSqlConn = new SqlConnection(strStringConn); SqlCommand objSqlComando = new SqlCommand(strStringComando, objSqlConn); SqlDataReader leitura = null; objSqlComando.Parameters.Add("@nome", SqlDbType.NVarChar); objSqlComando.Parameters["@nome"].Value = strNome; try { objSqlConn.Open(); if (objSqlConn.State == ConnectionState.Open) { leitura = objSqlComando.ExecuteReader(); if (leitura.HasRows) { gridLeitura.DataSource = leitura; } else { lblTeste.Text = "Erro Fatal!!"; // hauhauahuahu } gridLeitura.DataBind(); leitura.Close(); } objSqlConn.Close(); } catch (Exception ex) { lblExcecao.Text = ex.ToString(); objSqlConn.Close(); } } Vlw pela ajuda quintelab. Qlquer coisa estamos aí! \o Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Março 26, 2008 Opa tranquilo, que bom que achou a solução. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites