none
meu codigo faz break RRS feed

  • Pergunta

  • Boa tarde pessoal, estou a criar uma app web em Asp.Net para a recepção e no entanto fiz um autocomplete na textbox para poder ir buscar os nomes dos funcionários com os seus gabinetes na base de dados.

    só que esta acontecer algo estranho quando faço um run na pagina ele só vai buscar os gabinetes a todos os funcionarios do gti e alguns do gabinete do ministro eis o codigo dentro da textbox:

    /*OBS: se for o gabinete de Tecnologia de Informação ele, faz a leitura, mas se for outro pula logo para o fim,

    end catch*/

    if (txtnomevisitante.Text.Trim() != "" && txtnumdoc.Text.Trim() != "" && txtfuncionariocontactar.Text.Trim() != "")

    Button5.Enabled = true; string constring = (ConfigurationManager.ConnectionStrings["conection"].ConnectionString); string Query = "select t1.idf as codigo, t1.Nome,t1.Extencao,t2.Nome as Gabinete,t4.TpDominios as Ala, t2.Abrev,t3.TpDominios as Piso from tb_funcionario as t1 inner join tb_gabinete as t2 on t2.idgb =t1.fk_gabinete inner join tb_TpDominio as t3 on t3.id_tpdm =t2.Piso inner join tb_TpDominio as t4 on t4.id_tpdm =t2.Ala where t1.Nome ='" + txtfuncionariocontactar.Text + "' ;"; SqlConnection cnn = new SqlConnection(constring); SqlCommand cmd = new SqlCommand(Query, cnn); SqlDataReader sqlReader; try { cnn.Open(); sqlReader = cmd.ExecuteReader(); while (sqlReader.Read()) { string sper = sqlReader["Gabinete"].ToString(); txtgabinete.Text = sper; string Abrev = sqlReader["Abrev"].ToString(); txtsigla.Text = Abrev; string Extenc = sqlReader["Extencao"].ToString(); txtextensao.Text = Extenc; string Ala = sqlReader["Ala"].ToString(); txtlado.Text = Ala; string Piso = sqlReader["Piso"].ToString(); txtpiso.Text = Piso; } } catch (Exception ex) { Response.Write("ERRO" + ex.Message); } }

    Eis o meu Inner Join

    Antes de mais, Agradeço pela atenção.

    terça-feira, 16 de junho de 2015 14:28

Respostas

  • GILBLAZER,

    Já que sua Query está ok, vamos para outro detalhe.

    Quando você utiliza while(sqlReader.Read())

    O sistema irá realizar um laço em todos os registros do SqlDataReader, até chegar no final.

    Dai como você está atribuindo os dados em objetos na tela, a cada passo do laço, você está substituindo os valores, então você sempre terá a impressão que ele só leu o último registro.

    O correto seria você colocar um DataGrid na tela, e preenchê-lo da seguinte forma:

    /*OBS: se for o gabinete de Tecnologia de Informação ele, faz a leitura, mas se for outro pula logo para o fim,
    end catch*/
    if (txtnomevisitante.Text.Trim() != "" && txtnumdoc.Text.Trim() != "" && txtfuncionariocontactar.Text.Trim() != "")
    
    	Button5.Enabled = true;
    
    
    	string constring = (ConfigurationManager.ConnectionStrings["conection"].ConnectionString);
    	string Query = "select t1.idf as codigo, t1.Nome,t1.Extencao,t2.Nome as Gabinete,t4.TpDominios as Ala, t2.Abrev,t3.TpDominios as Piso from tb_funcionario as t1 inner join tb_gabinete as t2 on t2.idgb =t1.fk_gabinete inner join tb_TpDominio as t3 on t3.id_tpdm =t2.Piso inner join tb_TpDominio as t4 on t4.id_tpdm =t2.Ala where t1.Nome ='" + txtfuncionariocontactar.Text + "' ;";
    	SqlConnection cnn = new SqlConnection(constring);
    	SqlCommand cmd = new SqlCommand(Query, cnn);
    	SqlDataReader sqlReader;
    	try
    	{
    		cnn.Open();
    		using (SqlDataAdapter a = new SqlDataAdapter(cmd))
    		{
    		    DataTable dt = new DataTable();
    		    a.Fill(dt);
    			
    			meuDataGrid.DataSource = dt;
    		}		
    	}
    	catch (Exception ex)
    	{
    	Response.Write("ERRO" + ex.Message);
    	}
    }


    Att, Lucio Rogerio


    Espero ter ajudado, se ajudei, por favor "Vote como Útil", e se resolvi seu problema, clique em "Propor como Resposta".

    • Marcado como Resposta Cristopher C I_ sexta-feira, 19 de junho de 2015 14:02
    quarta-feira, 17 de junho de 2015 13:57