Está em constante revisão. Usem o que quiserem.
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.
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.
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).
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).
Assinar:
Postagens (Atom)