Tag Archives: .NET

O Word é uma carroça…. mas cada um no seu lugar

Meu, fiquei chateado, mas não dá para abraçar o mundo certo?

Todo mundo sempre falou de Crystal Reports, Active Reports, Reporting Services, blabla Reports, enfim. Nunca me acostumei com essas ferramentas, e como tinha experiência no Office, sempre que me pediam um relatório, fazia com que o dito fosse gerado no Word ou no Excel, seja via Interop ou o que quer que fosse. Todos adoravam a idéia pois tinham a oportunidade de customizar seus relatórios com formatação e tudo mais. Lindo!

Qual o problema então? Desempenho!

Tentei gerar um relatório simples no Word que lista 500 registros de uma tabela, e o dito demorou 10 minutos para ser gerado! Fiz de tudo! Usei ADO tradicional, troquei o Dataset por Datareader, desativei o ScreenUpdating, enfim, nada. A mesma demora de sempre. A alternativa foi o Excel com o famoso CopyFromRecordset, já comentado neste humilde blog.

O duro foi ter colocado tanta esperança na ferramenta perante os clientes. Não vou condenar de vez o coitado do Word. Vou fazer uns testes com XML gerado no padrão Word, que claro, só poderá ser aberto no Word 2003.

Fica aí para a comunidade.

Abraços

Tomás Vásquez
http://www.tomasvasquez.com.br

Republicação de post. Originalmente publicado no blog theSpoke.net.

Diferença entre datas em C#

O que era uma simples tarefa no VB clássico era tirar a diferença entre duas data baseado no conjunto de funções que a linguagem oferecia. Algo parecido pode ser nas linguagens .NET, porém não de forma tão intuitiva. Existem novos objetos e classes (estruturas ou structs no caso do DateTime) que precisam ser conhecidas e utilizadas para conseguir a mesma informação.

O código abaixo mostra um exemplo de como obter tais dados de forma simples utilizando a linguagem C#.

1
2
3
4
5
6
7
8
9
DateTime startTime = DateTime.Now;
 
DateTime endTime = DateTime.Now.AddSeconds( 100 );
 
TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
Console.WriteLine( "Time Difference (hours): " + span.Hours );
Console.WriteLine( "Time Difference (days): " + span.Days );

No exemplo acima, foram criados dois objetos DateTime sendo um com a data atual e o outro com 100 segundo a mais do que a data corrente. Basta executar o método Subtract() da struct DateTime para obter um objeto TimeSpan com a diferença de valores entre as duas datas. O objeto TimeSpan representa um intervalo de tempo, ou duração de tempo, medida como um número positivo ou negativo de dias, horas, minutos, segundos e frações de segundo.

Saída:

1
2
3
4
Time Difference (seconds): 40
Time Difference (minutes): 1
Time Difference (hours): 0
Time Difference (days): 0

Como pode ser visto, 100 segundo equivalem a exatos 1 minuto e 40 segundos, que é o resultado exato do código. Outras propriedades como a quantidade de milisegundos poderia ser também avaliadas.

Um descritivo completo da classe TimeSpan pode ser visto no MSDN: http://msdn2.microsoft.com/en-us/library/system.timespan.aspx

Apesar de ser uma abordagem diferenciada, trata-se de uma mecanismo poderoso de tratamento de data e hora no .NET.

Referência: http://www.dotnetspider.com/kb/Article552.aspx