Conceito de banco de dados (Parte 2)

Continuando o artigo anterior sobre conceito de banco de dados, agora vamos aprender como filtrar dados, neste caso o usuário irá digitar o valor do preço do produto e o código irá filtrar todos os produtos onde o preço for maior ou igual. Veja o código completo, basicamente é igual ao anterior sobre ler um valor no banco exceto duas linhas que precisam ser alteradas.

 try  
 {
   string sql = "Select * from Products Where UnitPrice >= @preco";  

   using (SqlConnection conn = new SqlConnection(conexao))  
   {  
     conn.Open();  
     DataTable dt = new DataTable();  
     using (SqlCommand cmd = new SqlCommand(sql, conn))  
     {  
       cmd.Parameters.AddWithValue("@preco",  
         Convert.ToDecimal(textBox1.Text));  
       SqlDataReader reader = cmd.ExecuteReader();  
       dt.Load(reader);  
       reader.Close();  
     }  
     conn.Close();  
     dataGridView1.DataSource = dt;  
   }  
 }  
 catch (Exception)  
 {  
   MessageBox.Show("Ocorreu algum erro na leitura do banco");  
 }  

A instrução T-SQL seleciona todos os produtos onde (Where) o campo UnitPrice (preço) for & >= (maior ou igual) ao @preco. O @preco significa que é um parâmetro, o qual está declarado na linha seguinte.


A sintaxe informa que o comando cmd declara o parâmetro Parameters e adiciona o valor AddWithValue declarado no @preco contendo o valor digitado pelo usuário no controle textBox1. A propriedade Text lê o valor digitado.

 string sql = "Select * from Products Where UnitPrice >= @preco";  
 cmd.Parameters.AddWithValue("@preco",  
 Convert.ToDecimal(textBox1.Text));  


Veja o resultado com o filtro 60. Observe a coluna UnitPrice.


Atualizar Dados no Banco



Todo banco de dados pode disponibilizar registros para ser atualizado, isto é comum. Neste exemplo iremos atualizar o campo UnitsInStock (quantidade no estoque) igual ao valor que o usuário digitar. No entanto, quando se atualiza dados é importante destacar para qual registro será realizada a operação. Neste caso, a quantidade no estoque será atualizada somente para o produto onde o campo ProductID (código do produto) for igual ao código que o usuário digitar. Veja o código completo.


 try  
 {  
   string sql = "Update Products SET UnitsInStock=@qtde Where ProductID=@codigo";  
   using (SqlConnection conn = new SqlConnection(conexao))  
   {  
     conn.Open();  
     using (SqlCommand cmd = new SqlCommand(sql, conn))  
     {  
       cmd.Parameters.AddWithValue("@qtde",  
         Convert.ToInt16(txtEstoque.Text));  
       cmd.Parameters.AddWithValue("@codigo",  
         Convert.ToInt16(txtID.Text));  
       cmd.ExecuteNonQuery();  
       MessageBox.Show("Estoque atualizado");  
     }  
     conn.Close();  
   }  
 }  
 catch (Exception)  
 {  
   MessageBox.Show("Ocorreu algum erro na atualização de dados");  
 }  

Vamos a explicação detalhada das linhas que interessam, pois o restante é igual aos códigos vistos anteriormente. Veja a instrução T-SQL dizendo Update (Atualize) a tabela Products (Produtos) para o campo (SET UnitsInStock) igual ao parâmetro @qtde que é a quantidade que o usuário digitar. Como a atualização será feita somente para um produto o Where (onde) aplica o filtro com a condição ProductID (código do produto, este é um campo chave e único) for igual ao parâmetro @codigo cujo valor o usuário também irá digitar. Nestas instruções de atualização se você não declarar o filtro (Where) a execução se dará para todos os registros da entidade, então, preste atenção e aplique o filtro quando necessário. Toda e qualquer operação que não seja de leitura, use o ExecuteNonQuery para efetivar o comando no banco.


A seguir vamos aprender como fazer inclusão de dados no banco de dados. Neste exemplo eu não criei uma interface de usuário para que ele digite as informações, apenas fixei os dados porque o foco é mostrar como incluir. O código completo está a seguir.


  try   
  {   
 //Veja como é a instrução T-SQL para inclusão. Você deve declarar o INSERT INTO  
 //(inclua na tabela) Products (Produtos), seguido da lista de campos da entidade,  
 //values (valores) seguido da lista de parâmetros a serem declarados depois.  
   string sql = "INSERT INTO Products (ProductName, UnitPrice, UnitsInStock, CategoryID) values (@nome, @preco, @estoque, @categoria)";   
   using (SqlConnection conn = new SqlConnection(conexao))   
   {   
    conn.Open();   
    using (SqlCommand cmd = new SqlCommand(sql, conn))   
    {   
 //Aqui eu acabei usando um truque, um artificio para gerar um número aleatório que  
 //será usado como dado e exemplo. Este número aleatório será gerado entre 200 e 500.  
     Random rnd = new Random();   
     int numero = rnd.Next(200, 500);   
 // A seguir são declarados todos os parâmetros para o nome, preço, estoque e categoria do produto novo.  
 //Note que usei o número aleatório gerado para servir como preço, estoque e também no nome do produto,  
 //o qual concatenei com a palavra Produto gerando por exemplo Produto234, Produto123, etc.   
     cmd.Parameters.AddWithValue("@nome", "Produto" + numero);   
     cmd.Parameters.AddWithValue("@preco", numero);   
     cmd.Parameters.AddWithValue("@estoque", numero);   
     cmd.Parameters.AddWithValue("@categoria", 1);   
     cmd.ExecuteNonQuery();   
     MessageBox.Show("Produto cadastrado com sucesso");   
     button1_Click(null, null);   
    }   
    conn.Close();   
   }   
  }   
  catch (Exception)   
  {   
   MessageBox.Show("Ocorreu algum erro no cadastro.");   
  }   

E aqui encerramos o assunto Conceito de banco de dados, até a próxima.

Tiago Sousa

Sou Desenvolvedor Web Full-Stack com ênfase em Java, atuando no mercado de TI há 15 anos. Ao longo da carreira, adquiri conhecimentos sólidos e abrangentes em diversas tecnologias.