.Net na prática

Macetes, dicas e coisas do dia-a-dia de um programador .Net

Lista de discussão Spring.Net-BR

clock maio 14, 2009 09:17 by author Admin

A lista de discussão Spring.Net-BR foi criada com o intuito de auxiliar os usuários deste framework, sendo uma ferramenta na resolução de problemas e dúvidas. Para fazer parte do grupo, basta ir no lado direito aqui do blog e lá embaixo haverá um campo para inscrição.

Página da lista de discussão: http://groups.google.com.br/group/springdotnet-br

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Compilador PHP para .Net

clock abril 28, 2009 04:18 by author Admin

Sim, é isso mesmo que você leu… É o projeto Phalanger, atualmente na versão 2.0 4th Beta. Para mais informações, acesse o site do projeto. Só para dar um gostinho, vou postar um trecho de código retirado do próprio site do Phalanger.

O código abaixo realiza a compressão de um arquivo de texto:

<?
// Program.php
import namespace System;
import namespace System:::IO;
import namespace System:::IO:::Compression;
 
// function compresses $in file to gz $out file
function compress($in, $out)
{
// Read content of the file to $text variable
$insr = new StreamReader($in);
$text = $insr->ReadToEnd();
$insr->Close();
 
// Write text to GZ file 
$outf = new FileStream($out, FileMode::Create);
$outsw = new StreamWriter
(new GZipStream($outf, CompressionMode::Compress));
$outsw->Write($text);	
$outsw->Close();
$outf->Close();
}
 
// call the compress function
compress("Input.txt", "Input.gz");
?>

 

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


DAO Genérico em VB.Net

clock abril 28, 2009 04:08 by author Admin

Comecei a estudar o NHibernate e logo me veio a cabeça a idéia de fazer um DAO Genérico, ou seja, uma única classe de acesso a dados que consiga persistir qualquer objeto. Já que VB.Net (e também C#) têm suporte a generics, isso é possível. Segue a interface do DAO:

   1:  Public Interface IGenericDAO(Of T, ID)
   2:   
   3:      Function Insert(ByVal Obj As T) As Boolean
   4:   
   5:      Function Update(ByVal Obj As T) As Boolean
   6:   
   7:      Function Delete(ByVal Obj As T) As Boolean
   8:   
   9:      Function Find(ByVal Identifier As ID) As T
  10:   
  11:      Function FindAll() As List(Of T)
  12:   
  13:  End Interface

 

E agora a implementação:

   1:  Imports NHibernate
   2:  Imports System.Collections.Generic
   3:   
   4:  ''' <summary>
   5:  ''' Classe genérica para acesso a dados utilizando NHibernate. Como utiliza generics, é possível persistir
   6:  ''' qualquer objeto, bastando definir os tipos a serem usados no lugar de T e ID.
   7:  ''' <example>
   8:  ''' Dim usuario As New Usuario
   9:  ''' Dim usuarioDAO As New GenericDAO(Of Usuario, Integer) 
  10:  ''' 
  11:  ''' usuario.Nome = "Rogério"
  12:  ''' usuario.Telefone = "19 32612649"
  13:  ''' usuario.Email = "bragil@gmail.com"
  14:  ''' 
  15:  ''' If usuarioDAO.Insert(usuario) Then
  16:  '''      Console.WriteLine("Sucesso!")
  17:  ''' Else
  18:  '''      Console.WriteLine("Erro ao inserir registro!")
  19:  ''' End If
  20:  ''' </example>
  21:  ''' </summary>
  22:  ''' <typeparam name="T">Tipo do objeto persistível</typeparam>
  23:  ''' <typeparam name="ID">Tipo de dado do identificador único (chave primária)</typeparam>
  24:  Public Class GenericDAO(Of T, ID)
  25:      Implements IGenericDAO(Of T, ID), IDisposable
  26:   
  27:      Private session As ISession
  28:      Private transaction As ITransaction
  29:   
  30:      ''' <summary>
  31:      ''' Construtor, obtém a sessão do NHibernateHelper e inicia a transação.
  32:      ''' </summary>
  33:      Public Sub New()
  34:          Try
  35:              session = NHibernateHelper.GetSession(GetType(T).Assembly)
  36:              transaction = session.BeginTransaction()
  37:          Catch ex As Exception
  38:              If Not session Is Nothing Then
  39:                  transaction.Dispose()
  40:                  session.Close()
  41:              End If
  42:          End Try
  43:      End Sub
  44:   
  45:      ''' <summary>
  46:      ''' Persiste um novo objeto.
  47:      ''' </summary>
  48:      ''' <param name="Obj">Objeto a ser persistido</param>
  49:      ''' <returns>True para sucesso, False para erro.</returns>
  50:      Public Function Insert(ByVal Obj As T) As Boolean Implements IGenericDAO(Of T, ID).Insert
  51:          Try
  52:              session.Save(Obj)
  53:          Catch ex As Exception
  54:              session.Close()
  55:              Return False
  56:          End Try
  57:          Return True
  58:      End Function
  59:   
  60:      ''' <summary>
  61:      ''' Atualiza um objeto existente.
  62:      ''' </summary>
  63:      ''' <param name="Obj">Objeto a ser atualizado</param>
  64:      ''' <returns>True para sucesso, False para erro.</returns>
  65:      Public Function Update(ByVal Obj As T) As Boolean Implements IGenericDAO(Of T, ID).Update
  66:          Try
  67:              session.Update(Obj)
  68:          Catch ex As Exception
  69:              session.Close()
  70:              Return False
  71:          End Try
  72:          Return True
  73:      End Function
  74:   
  75:      ''' <summary>
  76:      ''' Exclui um objeto existente.
  77:      ''' </summary>
  78:      ''' <param name="Obj">Objeto a ser atualizado</param>
  79:      ''' <returns>True para sucesso, False para erro.</returns>
  80:      Public Function Delete(ByVal Obj As T) As Boolean Implements IGenericDAO(Of T, ID).Delete
  81:          Try
  82:              session.Delete(Obj)
  83:          Catch ex As Exception
  84:              session.Close()
  85:              Return False
  86:          End Try
  87:          Return True
  88:      End Function
  89:   
  90:      ''' <summary>
  91:      ''' Recupera um objeto persistido na base de dados.
  92:      ''' </summary>
  93:      ''' <param name="Identifier">Chave primária do objeto</param>
  94:      ''' <returns>Objeto</returns>
  95:      Public Function Find(ByVal Identifier As ID) As T Implements IGenericDAO(Of T, ID).Find
  96:          Dim Obj As T = Nothing
  97:          Try
  98:              Obj = CType(session.Load(Obj.GetType, Identifier), T)
  99:          Catch ex As Exception
 100:              session.Close()
 101:          End Try
 102:          Return Obj
 103:      End Function
 104:   
 105:      ''' <summary>
 106:      ''' Retorna todos os objetos persistidos na base de dados.
 107:      ''' </summary>
 108:      ''' <returns>Coleção de objetos</returns>
 109:      Public Function FindAll() As List(Of T) Implements IGenericDAO(Of T, ID).FindAll
 110:          Dim list As New List(Of T)
 111:          Try
 112:              list = session.CreateCriteria(GetType(T)).List(Of T)()
 113:          Catch ex As Exception
 114:              session.Close()
 115:          End Try
 116:          Return list
 117:      End Function
 118:   
 119:      ''' <summary>
 120:      ''' Confirma a transação corrente (commit)
 121:      ''' </summary>
 122:      Public Sub Commit()
 123:          transaction.Commit()
 124:      End Sub
 125:   
 126:      ''' <summary>
 127:      ''' Desfaz a transação corrente (rollback)
 128:      ''' </summary>
 129:      Public Sub Rollback()
 130:          transaction.Rollback()
 131:      End Sub
 132:   
 133:      Private disposedValue As Boolean = False        ' To detect redundant calls
 134:   
 135:      ' IDisposable
 136:      Protected Overridable Sub Dispose(ByVal disposing As Boolean)
 137:          If Not Me.disposedValue Then
 138:              If disposing Then
 139:                  transaction.Dispose()
 140:                  session.Close()
 141:                  session.Dispose()
 142:              End If
 143:              ' TODO: free shared unmanaged resources
 144:          End If
 145:          Me.disposedValue = True
 146:      End Sub
 147:   
 148:  #Region " IDisposable Support "
 149:      ' This code added by Visual Basic to correctly implement the disposable pattern.
 150:      Public Sub Dispose() Implements IDisposable.Dispose
 151:          ' Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.
 152:          Dispose(True)
 153:          GC.SuppressFinalize(Me)
 154:      End Sub
 155:  #End Region
 156:   
 157:  End Class

 

E agora, para poder funcionar, o NHibernateHelper (bem simplificado, para fins didáticos). Lembrando que em ambiente web é necessário adaptar este helper, de modo a garantir o fechamento da sessão ao final de cada requisição.

   1:  Imports NHibernate
   2:  Imports NHibernate.Cfg
   3:   
   4:  Public Class NHibernateHelper
   5:      Private Shared _sessionFactory As ISessionFactory
   6:   
   7:      Public Shared Function GetSession(ByVal assembly As System.Reflection.Assembly)
   8:          If Not _sessionFactory Is Nothing Then
   9:              Return _sessionFactory
  10:          End If
  11:   
  12:          Dim cfg As New Configuration()
  13:          cfg.AddAssembly(assembly)
  14:   
  15:          'Omitindo a configuração do NHibernate
  16:          _sessionFactory = cfg.BuildSessionFactory()
  17:          Return _sessionFactory.OpenSession()
  18:      End Function
  19:   
  20:      Private Sub New()
  21:   
  22:      End Sub
  23:  End Class

 

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Geração de arquivos Excel em ambiente web

clock abril 28, 2009 04:01 by author Admin
Neste post vamos analisar a geração de arquivos .xls em ambiente web usando o GridView, uma forma prática e rápida de gerar relatórios simples. O método gerador recebe um DataTable com informações vindas de um banco de dados. Segue o código da classe geradora:
   1:  Imports System.IO
   2:  Imports System.Drawing
   3:  Imports System.Data
   4:  Imports System.Web
   5:  Imports System.Web.UI
   6:  Imports System.Web.UI.WebControls
   7:   
   8:  ''' -----------------------------------------------------------------------------------
   9:  ''' <summary>
  10:  ''' Classe para geração de relatórios Excel. Utiliza o componente 
  11:  ''' System.Web.UI.WebControls.GridView para geração do arquivo .xls. 
  12:  ''' </summary>
  13:  ''' <remarks></remarks>
  14:  ''' -----------------------------------------------------------------------------------
  15:  Public Class ExcelReport
  16:      ''' <summary>
  17:      ''' Nome do arquivo Excel
  18:      ''' </summary>
  19:      ''' <remarks></remarks>
  20:      Private _file As String
  21:   
  22:      ''' <summary>
  23:      ''' Objeto GridView
  24:      ''' </summary>
  25:      ''' <remarks></remarks>
  26:      Private gv As GridView
  27:   
  28:      ''' <summary>
  29:      ''' Construtor, recebe o nome do arquivo .xls como parâmetro
  30:      ''' </summary>
  31:      ''' <param name="file">String contendo o nome do arquivo .xls a ser gerado.</param>
  32:      ''' <remarks></remarks>
  33:      Public Sub New(ByVal file As String)
  34:          Me._file = file
  35:          ' Cria o GridView
  36:          gv = New GridView()
  37:          ' Formatação do GridView para que a planilha fique "zebrada"
  38:          gv.HeaderStyle.ForeColor = Color.Black
  39:          gv.AlternatingRowStyle.BackColor = Color.Yellow
  40:          gv.RowStyle.BackColor = Color.White
  41:      End Sub
  42:   
  43:      ''' <summary>
  44:      ''' Gera um arquivo Excel a partir de um DataTable. 
  45:      ''' </summary>
  46:      ''' <param name="dt">Instância do objeto DataTable</param>
  47:      ''' <remarks></remarks>
  48:      Public Sub DataTableToExcel(ByRef dt As DataTable)
  49:          If dt.Rows.Count < 65536 Then
  50:              Dim response As HttpResponse = HttpContext.Current.Response
  51:              response.Clear()
  52:              response.AddHeader("Content-Disposition", "attachment; filename=" + Me._file)
  53:              response.ContentType = "application/vnd.ms-excel"
  54:              Dim stringWrite As New StringWriter
  55:              Dim htmlWrite As New HtmlTextWriter(stringWrite)
  56:              gv.DataSource = dt
  57:   
  58:              gv.DataBind()
  59:              gv.RenderControl(htmlWrite)
  60:              response.Write(stringWrite.ToString)
  61:              response.End()
  62:          Else
  63:              ' se tiver mais que 65536 linhas, dispara a exception
  64:              Throw New Exception("Consulta deve conter menos que 65536 linhas")
  65:          End If
  66:      End Sub
  67:  End Class

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Asp.Net - Desabilitar o cache do browser para a página

clock abril 28, 2009 03:55 by author Admin

É fácil desabilitar o caching da página no browser.

Response.Cache.SetCacheability(HttpCacheability.NoCache) 

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Linguagens de programação esotéricas

clock abril 24, 2009 02:53 by author Admin

Conhece a linguagem Brainfuck? E Whitespace? Não? Então leia este post do iCaju sobre linguagens de programação esotéricas. Só para dar uma palhinha, segue um “Olá mundo!” escrito em Brainfuck:

++++++++++[>++++++++>+++++++++++
/>---------->+++>++++++++>+++++++
+++++>+++++++++++>++++++++++>+++
++++++++>+++<<<<<<<<<<-]>-.>--.>
++++.>++.>---.>---.>.>.>+.>+++.>

Entendeu alguma coisa? :D

Confira também uma lista de programas “Olá mundo!” em linguagens esotéricas clicando aqui.

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Forçar o download em VB.Net

clock abril 23, 2009 08:55 by author Admin

A rotina abaixo é útil quando queremos que um determinado arquivo seja baixado ao invés de ser aberto no browser.

   1:      ''' <summary>
   2:      ''' Rotina para forçar o download de arquivos
   3:      ''' </summary>
   4:      ''' <param name="caminhoArquivo">Caminho para o arquivo no sistema de arquivos</param>
   5:      ''' <param name="contentType">Content-Type do arquivo (opcional)</param>
   6:      Protected Sub ForceDownload(ByVal caminhoArquivo As String, _
   7:                                  Optional ByVal contentType As String = "application/octet-stream")
   8:          Dim arquivo As FileInfo = New FileInfo(caminhoArquivo)
   9:          Response.Clear()
  10:          Response.AddHeader("Content-Disposition", "attachment; filename=" + arquivo.Name)
  11:          Response.AddHeader("Content-Length", arquivo.Length.ToString())
  12:          Response.ContentType = contentType
  13:          Response.WriteFile(arquivo.FullName)
  14:          Response.End()
  15:      End Sub

 

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5