Dicas sobre desenvolvimento de software, gestão e tributações

Rede Social

28 de julho de 2020

C# Consultar CEP pelo webservice dos correios


No post de hoje irei mostrar uma forma simples de se consultar um CEP pelo webservice que os correios disponibilizam.

Para isso irei criar um form padrão do windows forms mesmo bem simples com um campo de texto para se digitar o Cep, um campo de texto multi linhas para mostrar o retorno do webservice e um botão para acionar a pesquisa.



Feito isso vou adicionar a referência do serviço ao meu projeto. Clique com o botão direito em referências e em adicionar referência de serviço



Na tela que aparecerá coloque o endereço do serviço https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl e clique em ir, aguarde carregar, ele irá mostrar o serviço e os métodos que ele possui, em Namespace coloque o nome que o serviço terá dentro do seu software e confirme.



Pronto agora é só implementar o evento de clique do botão, se conectar ao webservice para usar a função de consultar cep como abaixo.


using (var ws = new WsCorreioCep.AtendeClienteClient())
{
        try
        {
           WsCorreioCep.enderecoERP endereco = ws.consultaCEP(txtCEP.Text);

           string enderecoTxt = endereco.end + Environment.NewLine +
                                         endereco.complemento2 + Environment.NewLine +
                                         endereco.bairro + Environment.NewLine +
                                         endereco.cidade + Environment.NewLine +
                                         endereco.uf + Environment.NewLine +
                                         endereco.cep + Environment.NewLine +
                                         endereco.unidadesPostagem;

          txtResposta.Text = enderecoTxt;
      }
     catch (Exception ex)
    {
       MessageBox.Show(ex.Message);
    }
}
Ler

21 de julho de 2020

C# Ordenação em listas LINQ


No post de hoje irei mostrar como ordenar uma lista em C# utilizando LINQ, portanto deve-se importar o namespace.
using System.Linq;

Lembrando que uma lista no caso do nosso exemplo será uma coleção de classes.

Temos a classe:
Aula
{
    Id int
    NomeAula string
    Curso int
    TempoDuracao datetime
}

List<Aula> aulas;

Nesse exemplo quero ordenar a lista de aulas com as aulas de menor tempo de duração para a maior:
var aulasOrdenadas = aulas.OrderBy(a => a.TempoDuracao);

Ou caso eu queira fazer o contrário, quero que ordene de forma descendente para ter primeiro as aulas com maior tempo de duração:
var aulasOrdenadas = aulas.OrderByDescending(a => a.TempoDuracao);

Também funciona para ordem alfabética, imaginando que quero ordenar por ordem do nome teria apenas que alterar a propriedade da ordenação:
var aulasOrdenadas = aulas.OrderBy(a => a.NomeAula);
Ler

14 de julho de 2020

CSS: Propriedade Display




No post de hoje vou mostrar a propriedade Display do CSS.

Como visto na imagem acima temos dois valores principais para o Display, o Block e o Inline, além do nome que não exibe nada e o inline-block que é a mistura dos comportamentos do inline e do block juntos, mas calma vou explicar um a um. Existem ainda outros valores, mas por hoje vamos focar nesses quatro principais e mais usados.

display: none
Esse valor faz com que o elemento não seja exibido na página, o elemento HTML não é renderizado.

display: block
Esse valor faz com que o elemento seja tratado como exclusivo em uma linha, ou seja, apenas esse elemento ocupará a linha toda, por mais que a largura do elemento ocupe a metade da página, nada estará ao seu lado (existem jeitinhos de se alterar isso, mas não é o padrão), semelhante ao que temos no HTML com o <p>, a altura tem um comportamento normal.

display: inline
Esse valor faz com que o elemento permita posicionar elementos ao lado dele etc. semelhante ao que se usa em HTML com o <span> por exemplo, mas não é possível alterar a largura e altura

display: inline-block
Esse valor faz com que o elemento se comporte como um inline onde posso acomodar elementos ao lado na mesma linha e tudo mais que o inline tem, mas com um adicional de poder setar altura e largura como o block permite.


Ler

30 de junho de 2020

Quais os bancos de dados mais utilizados 2020


O db-engines.com divulga uma lista sempre bem atualizada dos bancos de dados mais utilizados, é interessante ver como estão se saindo no mercado os bancos de dados que você utiliza, tem conhecimento ou pretende estudar. Ele mostra um comparativo entre datas para ver se há uma evolução ou se o mesmo está sendo menos utilizado mundo a fora.

Como podemos ver na lista os 3 maiores ainda continuam e continuarão por um tempo mandando no mercado (Oracle, MySql e Sql Server), mas é interessante ver por exemplo como o MongoDB vem se mantendo na quinta posição, sendo o de maior posição entre os bancos de dados não relacionais.

Caso tenha interesse temos vários artigos relacionados ao MongoDB, vale a pena dar uma olhada.
Além é claro das postagens sobre SQL Server.

Em contrapartida temos o Acces caindo a cada nova temporada enquanto SQLite, Cassandra e os Azure Sql database e Cosmos vem subindo.

Comparativo entre bancos de dados

Ler

23 de junho de 2020

Sql: Limpeza no HD (LogFile)


Uma boa forma de conseguir espaço no HD é fazer uma limpeza nos arquivos de log do SQL Server, isso acontece muito com os desenvolvedores que tem banco de dados de testes e ficam executando muitos comandos o tempo todo.
O arquivo de log nesses casos vai inflando e muitas vezes não é tão útil porque foram apenas testes então reduzir a quantidade de informações dele não representará grandes perdas.

Lembrando que isso pode ser aplicado à qualquer banco, não apenas de testes, mas tenha cuidado o arquivo de log tem informações importantes caso precise por exemplo executar um procedimento de manutenção ou análise de dados.

Primeiro vamos ver qual o tamanho do arquivo de log dos bancos de dados que você tem.

WITH FS
AS
(
    SELECT DATABASE_ID, TYPE, SIZE * 8.0 / 1024 SIZE, physical_name
    FROM SYS.MASTER_FILES
)
SELECT
    NAME AS NOMEDOBANCO,
    (SELECT SUM(SIZE) FROM FS WHERE TYPE = 0 AND FS.DATABASE_ID = DB.DATABASE_ID) DATAFILESIZEMB,
    (SELECT SUM(SIZE) FROM FS WHERE TYPE = 1 AND FS.DATABASE_ID = DB.DATABASE_ID) LOGFILESIZEMB,
 (SELECT PHYSICAL_NAME FROM FS WHERE TYPE = 1 AND FS.DATABASE_ID = DB.DATABASE_ID)
FROM SYS.DATABASES DB

Esse comando vai mostrar o nome do banco, o tamanho do banco, o tamanho do log e o local do arquivo ldf.

Compare o tamanho do banco com o tamanho do log para decidir qual banco vai querer executar o procedimento. Muitas vezes os arquivos de log ficam bem maiores que o próprio banco.

USE MEU_BANCO_DE_DADOS

ALTER DATABASE MEU_BANCO_DE_DADOS
SET RECOVERY SIMPLE;
GO

DECLARE @NOMELOG varchar(500) = (SELECT DISTINCT name FROM sys.master_files WHERE type = 1 AND name LIKE '%MEU_BANCO_DE_DADOS%')
DBCC SHRINKFILE (@NOMELOG, 100);
GO

ALTER DATABASE MEU_BANCO_DE_DADOS
SET RECOVERY FULL;
GO

Esse comando vai limpar o arquivo de log até chegar a próximo dos 100 MB por causa desse comando SHRINKFILE (@NOMELOG, 100); caso queira outro valor é só trocar de 100 para o que desejar.
Onde estiver MEU_BANCO_DE_DADOS substitua pelo banco de dados que você escolheu.
Ler

16 de junho de 2020

Sql: Having como funciona.


Having é a condição que se aplica ao resultado de um group by. Ela pode ser usada em conjunto com o where e tem uma função semelhante a ele, mas servindo apenas para resultados de um group. É muito útil, mas algumas vezes esquecida pelos programadores.

Vamos a um exemplo:

SELECT X, SUM(Y) 
FROM TAB 
GROUP BY X 
HAVING SUM(Y) >= 10

Neste caso estou selecionando a coluna X e realizando uma soma da coluna Y, essa soma é realizada agrupando os X que são iguais, mas eu só quero visualizar os X que tem a soma de Y maior ou igual a 10.
Mas vamos para um exemplo mais real.

SELECT CPF, COUNT(*) 
FROM VENDAS
WHERE YEAR(DATA_VENDA) = 2020 
GROUP BY CPF 
HAVING COUNT(*) > 100

No caso acima quero saber todos os CPFs de clientes que realizaram compras na minha loja no ano de 2020, para isso eu seleciono o CPF e uso o count para contar quantas vendas foram para cada cliente, por isso agrupo por CPF, mas imagine que quero ver apenas os clientes mais fiéis, que fizeram mais de 100 compras, tendo o count e o group by fica simples, é só adicionar o having maior que 100 que no caso uma tradução possível seria tendo, quero uma contagem das vendas agrupadas por cliente, mas mostrando apenas clientes tendo mais que 100 compras.

Tradução literal do comando:
Selecione o CFP e contagem de linhas
da tabela de vendas
quando a data da venda estiver no ano de 2020
agrupando por CPF
tendo a contagem de linhas valor superior a 100.



Ler

9 de junho de 2020

Git: Como clonar (baixar) um repositório remoto para sua máquina


Para copiar os arquivos de um repositório remoto para a sua máquina é só usar o comando clone:
g clone git@github.com:repositorioRemoto.git meuRepositorioNovo
onde git@github.com:repositorioRemoto.git é o repositório que você quer baixar e meuRepositorioNovo é o nome do repositório na sua máquina.

Lembrando que o clone só serve para repositórios onde você tem permissão para controlar, caso você use o clone para um repositório que não seja seu, você vai conseguir baixar, mas não vai conseguir subir alterações para ele.
Ler

2 de junho de 2020

Git: Como enviar alterações para o repositório remoto (push)


git commit -am "DescricaoDaMinhaAlteracao"
Isso faz com que seja apenas comitada (confirmada localmente) a alteração, após isso é necessário enviar para o servidor para isso usamos:

git push meuRepositorio master
O comando acima envia minhas alterações para o repositório de nome "meuRepositorio" no brach "master", caso você esteja querendo enviar para outro branch é só colocar o nome dele no lugar do master.
Ler