Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

diogom

verifiar todas as datas da bd e comparar com a do sistema

Mensagens Recomendadas

diogom    0
diogom

Tenho uma duvida. Como faço para verificar todas as datas, e as que coincidirem com a do sistema, aparecer na grid view. Deste maneira, so verifica a primeira e se nao for igua a do sistema, nao carrega as outras que sao para a gridview.

MySqlConnection conDatabase = new MySqlConnection("Database=" + BANCO + ";Data Source=" + SERVIDOR + ";User Id=" + USUARIO + ";Password=" + SENHA + "; pooling=false");
		 conDatabase.Open();

		 MySqlDataReader leitura;

		 MySqlCommand command = conDatabase.CreateCommand();
		 command.CommandText = "SELECT datanasc from fichacli where user = '" + userTB.Text + "' ";

		 leitura = command.ExecuteReader();
		 //ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('" + leitura + "');", true);

		 if (leitura.Read())
		 {

			 Bdata = leitura.GetString(0);
			 //ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('" + Bdata + "');", true);
			 string cDiaMes = Convert.ToDateTime(Bdata).Date.ToString("dd/MM");
			 //ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('"+Bdata+"');", true);
			 //ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('" + Bdata + "');", true);
			 if (cDiaMes == datasistema)
			 {
				 Button3.Visible = true;
				 //ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('aqui');", true);
				 //string criterio = "";
				 String queryString =
							 ("Select cliente,email,datanasc from fichacli Where user like '" + userTB.Text + "'");
				 //String queryString =
				 //		 ("Select cliente,email,datanasc from fichacli Where user like '" + userTB.Text + "'and data = '" + criterio + "' " + "order by mes and data ASC");
				 // Run the query and bind the resulting DataSet
				 // to the GridView control.
				 DataSet ds = GetData(queryString);
			 }
			 else
			 {
				 ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('Não existem aniversariantes hoje');", true);
			 }
		 }

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
DiogoFialho    0
DiogoFialho

Exactamente. Tens de utilizar um while e não um if.

O If apenas te verifica se é possível ler e, caso seja, lê-te o primeiro valor recolhido. Por sua vez, o while, verifica se é possível ler e, caso seja, lê todos os registos existentes.

Contudo tenho um aparte para te fazer:

Se vais ler dados directamente de uma textbox em que é o utilizador a introduzir os dados, aconselho-te a não fazeres a query assim. Imaginando que a pessoa introduz na textbox o seguinte:

'; drop database <nome_BD>;

Isto iria fazer o quê?

Pois bem, a plica iria terminar a string, logo o comando passaria a ser válido. Para além disso, o ';' iria terminar o comando. De seguida o drop iria ser considerado um outro comando e, caso se soubesse o nome da B.D. ficarias sem a base de dados porque iria ser apagada.

Um conselho que te dou é de utilizadores Stored Procedures (SP).

Não te coloques a verificar se a string tem caracteres estranhos ou algo do género, pois isso irá dar muito mais trabalho e mais erros.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
bioshock

Para além do que já foi dito e focando essencialmente o problema da segurança, que podes dar uma olhadela aqui: http://wiki.portugal-a-programar.pt/dev_net:csharp:access, após receberes os dados, confrontas com os dados actual.



DateTime valor = Convert.ToDateTime(leitura[0].toString());
if(!valor.ToString("yyyy/MM/dd") == DateTime.Now.ToString("yyyy/MM/dd"))
 {
  DataGridView1.Rows.Add(leitura[0].toString());
 }

Editado por bioshock

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
AntonioMateus    14
AntonioMateus

Mas se anda à procura de aniversariantes não é mais simples fazer isso no SQL?

Logo na 1ª instrução SQL restringir aos que fazem anos no dia actual.

command.CommandText = "SELECT clinete, Email, datanasc from fichacli where month(datanasc) = month (getdate()) 
and day(datanasc) = day(getDate()) and user = '" + userTB.Text + "' "

Assim é só feita uma chamada à BD e como já foi indicado é mais seguro usar stored procedure, ainda para mais em acesso web...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.