Jump to content

Problema com o READ


D3POD
 Share

Recommended Posts

Boas, estou a tentar fazer um read de um valor numa tabela da minha base de dados.

Já tentei várias formas e até alguns exemplos que guardei (em tempos devo ter feito algo funcional com uma situação idêntica), mas não estou a conseguir.

Estou a usar SQL Server.

Segue o meu código que está no evento Load do form... a ideia é inserir este valor numa label.

string label = lb_nreparacao.Text;
		 string query = "SELECT numero FROM reparacoes WHERE numero = @numero";
		 SqlConnection con = new SqlConnection(server);
		 SqlCommand cmd = new SqlCommand(query, con);
		 con.Open();
		 cmd.Parameters.AddWithValue("@numero", label);
		 cmd.ExecuteReader();

Acho que me está a faltar qualquer...

Cumprimentos

Link to comment
Share on other sites

O valor é um int na base de dados e eu quero passar esse valor para uma label.

Penso que o meu problema esteja nesta linha:

cmd.Parameters.AddWithValue("@numero", label);

mais propriamente na "label"... neste campo devo colocar o destino do valor ou não?

Link to comment
Share on other sites

Sim experimentei, mas não estou a conseguir.

Eu acho que faltou me dizer um pormenor...

A ideia é eu ler o ultimo valor da coluna "numero".

Isto serve para quando o utilizador abre o form aparecer logo o numero da reparação que vão inserir... ou seja o ultimo numero da database + 1

Link to comment
Share on other sites

Então não precisas do parametro, basta alterares o select para retornar o ultimo numero.

Algo assim (não testado)

int proximoNumero = 1;
using(SqlConnection con = new SqlConnection(server))
{
   SqlCommand cmd = new SqlCommand("SELECT TOP 1 numero FROM reparacoes ORDER BY numero DESC", con);
   con.Open();
   int? ultimoNumero = (int?)cmd.ExecuteScalar();
   if(ultimoNumero.HasValue)
       proximoNumero = ((int)ultimoNumero)+1
}
Edited by nelsonr
Link to comment
Share on other sites

Tenho o código assim:

int proximonumero = 1;
		    string query = "SELECT TOP 1 numero FROM reparacoes ORDER BY numero DESC";
		    SqlConnection con = new SqlConnection(server);
		    SqlCommand cmd = new SqlCommand(query, con);
		    con.Open();
		    int? ultimonumero = (int?)cmd.ExecuteScalar();
		    if (ultimonumero.HasValue)
			    proximonumero = ((int)ultimonumero) + 1;
		    lb_nreparacao.Text = proximonumero.ToString();

Isto dá me o retorno do numero 1... mas eu acho que ele está a pegar-me no valor que eu atribuiu a quando da criação da variável e coloca na label.

Eu não entendi foi a utilização do "using" que meteste no teu exemplo, podes explicar?

Link to comment
Share on other sites

O using deve ser usado quando se cria ligações, para que quando a execução do código saia fora do bloco do using, automaticamente é chamado o dispose da variavel, fechando a ligação à base de dados.

Isso acontece mesmo que seja gerada uma excepção que force a saida anormal da execução.

Para confirmares se está a funcionar corretamente, coloca um breakpoint na linha seguinte ao ExecuteScalar e verifica se está a ler o valor corretamente

Link to comment
Share on other sites

Não sei trabalhar com o breakpoint, pelo que vou adiantar já a parte do gravar na base de dados e assim verifico se passa para o próximo numero.

Para já ele apresenta-me o numero 1... mas como a variável é iniciada com 1, ele pode estar apenas a passar esse valor

Link to comment
Share on other sites

Bom dia, ora já avancei com o passo seguinte e está tudo a funcionar... quando tento avançar com uma nova reparação ele apresenta corretamente o próximo numero.

Agora vou estudar os breakpoints e vou estudar o código bem que há coisas que ainda não percebo muito bem.

Obrigado a todos pela ajuda 🙂

Cumprimentos,

D3POD

Link to comment
Share on other sites

Os breakpoints são um ferramenta muito importante para fazeres debug à tua aplicação.

Permitem indicares uma (ou várias) linhas que queres que a aplicação faça uma pausa.

Quando a execução do código passa nessa linha, a aplicação faz uma pausa permitindo analisares como a aplicação está no momento (por exmeplo, ver o conteúdo das variaveis).

Além disso, permite depois ires avançando linha a linha na execução (Tecla F10 para passar para a proxima linha ou F11 para passar para a proxima execução). Ai consegues ver se a aplicação está a passar por onde pretendes

Link to comment
Share on other sites

Por acaso isso já costumo fazer mais ou menos, pensava que fazia mais que isso e que essa parte era apenas o "muito básico" dos breakpoints 🙂

Só não sabia ver o valor das variáveis, mas já percebi como funciona 😉

Obrigado mais uma vez por toda a ajuda.

Cumprimentos

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.