quarta-feira, 20 de março de 2013

Biblioteca

Publiquei no bitbucket o código da biblioteca que crie para o DFM e para o Stories, a Ak.


Está em constante revisão. Usem o que quiserem.

quinta-feira, 14 de março de 2013

Query com Reflection

Hoje tive que criar queries na mão, pois preciso fazer uma importação e o NHibernate demoraria muito para salvar os objetos.

Estava com preguiça de criar as queries uma a uma, olhando as propriedades do objeto. Então lembrei de reflection. Por que não? Afinal de contas, virei programadora porque detesto trabalho repetitivo...

Fiz uma iteração pelos tipos que queria e gravei de um arquivo.

using System;
using System.Collections.Generic;
using System.IO;


            var tipos = new[]
            {
                typeof ([tipo 1]),
                typeof ([tipo 2]),
            };

            var query = new List<String>();

            foreach (var tipo in tipos)
            {
                var colunas = new List<String>();
                var valores = new List<String>();

                var nomeTipo = tipo.Name.ToLower();

                foreach (var propertyInfo in tipo.GetProperties())
                {
                    if (propertyInfo.Name == "ID")
                        continue;
                 
                    colunas.Add(propertyInfo.Name);
                    valores.Add("\" + " + nomeTipo + "." + propertyInfo.Name + ".ToSql() + \"");
                }

                query.Add("@\"Insert into " + nomeTipo + " (" + String.Join(", ", colunas) + ")");
                query.Add(" Values (" + String.Join(", ", valores) + ")\";");


                var atribuicao = new List<String>();

                query.Add("@\"Update " + nomeTipo + " set ");

                foreach (var propertyInfo in tipo.GetProperties())
                {
                    if (propertyInfo.Name == "ID")
                        continue;

                    atribuicao.Add(propertyInfo.Name + " = \" + " + nomeTipo + "."
                        + propertyInfo.Name + ".ToSql() + \"");
                }

                query.Add(String.Join(", ", atribuicao) + " where ID = \" + "
                    + nomeTipo + ".ID + \"\";");

            }

            File.WriteAllLines([caminho do arquivo], query);


Então você pega o resultado do arquivo e cola no seu código. Melhor que ficar copiando as propriedades uma por uma.

sexta-feira, 1 de março de 2013

Formatação de números e datas (.NET)

Dessa vez o post é bem simples.

Volta e meia esbarro códigos grandes para formatar a exibição de números e datas. Por exemplo, quando o programador precisa exibir o número com zeros à direita ou quer formatar a data e usa as propriedades dela, transformando em string e concatenando.

Exemplo de número:

            var tamanhoDesejado = 10;
            var totalStr = total.ToString();
            var tamanhoAtual = totalStr.Length;

            var totalStr = "";
            var i = 0;

            while (i < (tamanhoDesejado - tamanhoAtual))
            {
                totalStr += "0";
                i++;
            }

            totalStr += totalStr;

Exemplo de data:


            var dataStr = data.Year.ToString()
                + "-" + data.Month.ToString()
                + "-" + data.Day.ToString();




Existe um jeito mais simples de fazer isso, um jeito nativo.

            var totalStr = total.ToString("0000000000");  //10 zeros para 10 dígitos

            var dataStr = data.ToString("yyyy-MM-dd"); //


Existem caracteres especiais para os dois casos de formatação. Por exemplo, com números, "." (ponto) significa o separador de decimal (em qualquer língua). No caso de data, as letras representam se vai ser usado ano, mês, dia, etc, sendo que é possível dizer o formato (ex: mês com número ou extenso, dia com um ou dois dígitos).