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

Rede Social

30 de novembro de 2015

Dias de diferença entre datas com C#


Nesta dica vamos realizar a comparação entre datas e descobrir quantos dias existem entre elas.
No caso irei comparar quantos dias estão entre o dia 28/11/2015 e a data atual 30/11/2015.

Vamos setar a data desejada para a comparação.
DateTime dtComparacao = new DateTime();
dtComparacao = Convert.ToDateTime("28/11/2015");

Depois comparar com a outra data, no caso estou pegando a data atual e extrair a diferença em dias.
TimeSpan timeSpanDif = DateTime.Now.Subtract(dtComparacao);
int dias = 0;
DateTime dif = new DateTime(timeSpanDif.Ticks);
dias = dif.DayOfYear;
Ler

29 de novembro de 2015

Análise memória RAM com C#


Nesta dica irei mostrar uma forma de ter a informação de memória RAM da máquina com C#.
Primeiramente  para esclarecer, a classe que será utilizada faz parte da biblioteca do VB, por tanto, teremos que adicioná-la ao projeto.
E vou colocar o using do namespace para encurtar seu nome de acesso.
using Microsoft.VisualBasic.Devices;

Agora os métodos, irei criar dois, um para retornar a memória ram instalada e outro para a que está em uso no instante da execução do método.

public int MemoriaInstalada()
{
int ramInstalada = 0;
ComputerInfo cInfo = new ComputerInfo();
var bytes = cInfo.TotalPhysicalMemory;
var memoriaKB = bytes / 1024;
ramInstalada = Convert.ToInt32(memoriaKB) / 1024;

return ramInstalada;
}

public int MemoriaEmUso()
{
int ramEmUso = 0;
ComputerInfo cInfo = new ComputerInfo();
var bytes = cInfo.AvailablePhysicalMemory;
var memoriaKB = avaliB / 1024;
int ramEmUso = Convert.ToInt32(memoriaKB) / 1024;

return ramEmUso;
}

Vale adicionar que a classe ComputerInfo tem várias outras informações interessantes, dê uma pesquisada.
Ler

17 de novembro de 2015

Deletar arquivos ou pastas C#


Uma dica simples para deletar arquivos ou pastas com C#, para isso será necessário passar como parâmetro o caminho absoluto do arquivo ou da pasta
como por exemplo, quero deletar uma pasta de nome "teste" que está no D:, então o parâmetro deverá conter D:\teste
public void Delete(string caminhoArquivo)
{
 System.IO.FileInfo f = new FileInfo(caminhoArquivo);
 f.Delete();
}
Caso o arquivo ou pasta esteja dentro do seu diretório da aplicação pode-se capturar o diretório da aplicação para não ter que passar o caminho absoluto sempre,
como por exemplo tenho uma pasta de nome "XML" dentro do diretório da minha aplicação
PAra ter o diretório corrente é só usar
string currentDirectory = DirectoryHelper.GetCurrentDirectoryPath();
agora é só concatenar o nome da minha pasta "XML"
Obs. Se fosse minha intenção excluir um arquivo deveria conter na string do caminho "Pasta\nome do arquivo . extensão"
"C:\Teste\arquivo.txt"
Ler

16 de novembro de 2015

Verificando e criando diretórios C#


Nesta dica irei mostrar uma forma de serem criados e também à verificar a existência de diretórios com C#
Primeiro no método vamos instanciar as informações do diretório, após verificar sua existência e caso não haja será criado.
public bool CriarDir(string caminhoDiretorio)
{
 System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(caminhoDiretorio);

 if (!dInfo.Exists)
 {
  dInfo = System.IO.Directory.CreateDirectory(destDirectoryPath);
 }
 if (!dInfo.Exists)
 {
  throw new DirectoryNotFoundException("Não é possível criar/encontrar o diretório.");
 }
 else
  return true;
}
O método também poderia ser modificado para só ser criado mediante um parâmetro.
public bool CriarDir(string caminhoDiretorio, bool criaDiretorio)
{
 System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(caminhoDiretorio);

 if (!dInfo.Exists)
 {
  if(criaDiretorio)
   dInfo = System.IO.Directory.CreateDirectory(destDirectoryPath);
  else
   return false;
 }
 if (!dInfo.Exists)
  return false;
 else
  return true;
}
Ler

15 de novembro de 2015

Descobrir memória em uso pelo SQL Server


Na postagem de hoje mostrarei como descobrir através de select quanto de memória ram o sql server está consumindo da máquina.
Este valor retornado é proveniente do próprio gerenciamento do SQL Server.
SELECT counter_name, cntr_value AS 'Total Server Memory (KB)'
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Total Server Memory (KB)'
Como o foco nesta postagem é a memória em uso limitei com o where para somente este valor, mas existem muitos outros retornados por essa mesma tabela.
Faça um select de todos os valores para conferir.
SELECT * FROM sys.dm_os_performance_counters
Ler

13 de novembro de 2015

Reiniciar contador automático (Identity) SQL Server


Hoje irei mostrar uma forma de reiniciar o contador do identity em uma tabela. Isso é bastante útil quando se tem uma tabela com valores constantemente zerados ou quando é preciso que a tabela comece seu trabalho desde o início.

Para isso vamos utilizar uma tabela “Operador” com a seguinte estrutura:
CREATE TABLE [dbo].[Operador](
 [IdOperador] [int] IDENTITY(1,1) NOT NULL,
 [Email] [varchar](200) NULL,
 [Senha] [varchar](max) NULL
 CONSTRAINT [PK_Operador] PRIMARY KEY CLUSTERED (IdOperador))

Se você tiver nessa tabela 5 registros, serão gerados Ids sequenciais para o IdOperador de 1 até 5:
Ao apagar todos os registros dessa tabela com o Comando DELETE e for inserido um novo registro ele receberá IdOperador = 6, isso ocorre porque toda vez que um registro é inserido, o SQL recupera o próximo ID de uma seqüência que não é alterada para um número menor ou zerada por exemplo.
Para reiniciar a numeração de uma coluna Identity de uma tabela do SQL Server, utilize o comando:
DBCC CHECKIDENT('[tabela]', RESEED, 0)

Aplicando o comando seguindo o exemplo, ficaria assim:
DBCC CHECKIDENT('Operador', RESEED, 0)
Isso fará que o próximo registro inserido receba IdOperador = 1.

Vale observar que este ID não necessariamente deverá ser 0.
DBCC CHECKIDENT('Operador', RESEED, 50)
Neste caso o próximo ID seria o 51.
Ler

12 de novembro de 2015

Leitura em leitores de código de barras com porta serial C#


Nesta postagem irei mostrar uma forma simples de realizar comunicação com leitor de código de barras através da porta serial.
Tanto a abertura de comunicação, quanto encerramento, além da leitura do código através da porta.
No caso eu utilizzei um leitor a laser fixo, esses bastante utilizados em mercado.
Primeiramente é necessário declarar a classe de portas seriais
public SerialPort PortaSerial { get; set; }
 
Com isso vou criar o método de abertura de comunicação (abertura de porta) para o meu aplicativo saber que existe comunicação com aquela porta e também que se trata de um leitor por exemplo
public bool AbreComunicacao(string portaSerial)
{
 bool retorno = false;
 try
 {
  portaSerial = portaSerial.AsString().Trim();
  if (PortaSerial != null && PortaSerial.IsOpen)
  { EncerraComunicação(); }
  PortaSerial = new SerialPort(portaSerial);
  if (!PortaSerial.IsOpen)
  { PortaSerial.Open(); }
  if (PortaSerial.IsOpen)
  { retorno = true; }
  else
  { retorno = false; }
 }
 catch (Exception e)
 {
  //Exibir uma possível mensagem ou realizar algum tratamento de exceção
 }
 return retorno;
}
E para encerrar a comunicação o método é este
public bool EncerraComunicação()
{
 bool retorno = false;
 try
 {
  if (PortaSerial != null && PortaSerial.IsOpen)
   PortaSerial.Dispose();
  if (PortaSerial == null || !PortaSerial.IsOpen)
  { retorno = true; }
  else
  { retorno = false; }
 }
 catch(Exception ex)
 {
  //Exibir uma possível mensagem ou realizar algum tratamento de exceção
 }
 return retorno;
}
Agora na leitura vou colocar um método que também retorna verdadeiro ou falso para saber se houve leitura e a leitura será retornado como out no parâmetro, mas poderia por exemplo ter o retorno direto da leitura e caso
não fosse possível ler retornar uma string vazia, são várias as possibilidades depende de como você deseja utilizar o método. Vamos à ele que é bastante simples.
public bool LePorta(out string leitura)
{
 bool retorno = false;
 leitura = "";
 try
 {
  if (PortaSerial != null && PortaSerial.IsOpen)
  {
   leitura = PortaSerial.ReadExisting();
   retorno = true;
  }
  else
  { retorno = false; }
 }
 catch(Exception ex)
 {
  //Exibir uma possível mensagem ou realizar algum tratamento de exceção
 }
 return retorno;
}
Ler