Jump to content
diogom

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

Recommended Posts

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);
			 }
		 }

Share this post


Link to post
Share on other sites
nelsonr

Boas,

provavelmente o que pretendes é substituir isto

if (leitura.Read())

por isto

while(leitura.Read())

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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());
 }

Edited by bioshock

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.