iF ~ 0 Report post Posted March 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 Share this post Link to post Share on other sites
quintelab 91 Report post Posted March 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... Share this post Link to post Share on other sites
iF ~ 0 Report post Posted March 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 Share this post Link to post Share on other sites
quintelab 91 Report post Posted March 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... Share this post Link to post Share on other sites
iF ~ 0 Report post Posted March 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 Share this post Link to post Share on other sites
quintelab 91 Report post Posted March 26, 2008 Opa tranquilo, que bom que achou a solução. Abraços... Share this post Link to post Share on other sites