Skip to content
Anderson Fernandes do Nascimento edited this page Sep 22, 2015 · 2 revisions

Framework Connection Factory

<connectionStrings>
  <add name="DEFAULT" 
	   connectionString="Data Source=INSTANCIA;
					Initial Catalog=dtb_X;
					User Id=******; 
					Password=*****;
					App=NomeSistema;
					MultipleActiveResultSets=True;"    
	   providerName="System.Data.SqlClient"/>
</connectionStrings>

(Exemplo de chamada da conexão) ##Class ConnectionFactory.CfConnection

using (var conn = new CfConnection("DEFAULT"))
{
	...
}

(Exemplo do arquivo de configurações para a conexão "DEFAULT")

A TransactionScopepode ser utilizada em qualquer camada, tanto camada DAO com na BO

try
{
   // Requer o MSDTC ativo
   using (var scope = new TransactionScope())
   {
   
      //Conexão com banco A no servidor X
      using (var conn = new CfConnection("DEFAULT"))
      {
         ...
      }
      
      //Conexão com o banco B no servidor Y
      using (var conn = new CfConnection("PORTAL"))
      {
         ...
      }

	  //Commit em todas as conexões dentro do escopo
      scope.Complete();
   }
   catch (TransactionAbortedException tae)
   {
	  //Rollback devido erro na transação
	  ...
   }
   catch (Exception ex)
   {
      //Rollback automatico em todas as conexões dentro do TransactionScope em caso de erros
      ...
   }
}

Executa a consulta no banco de dados e carrega automaticamente as entidades (VO / DTO), de forma simples, rápida e evitando erros de conversão incorreta.

Vo.User user;
const string sql = @"SELECT * FROM SIS_USER WHERE ID = @Id";

using (var conn = new CfConnection("DEFAULT"))
{
   using (var cmd = conn.CreateCfCommand())
   {
	  //Listagem de parâmetros
      var param = new List<CfParameter>
      {
         new CfParameter("@Id", id, DbType.Int32)
      };

	  //Executa query e retorna DTO carregada
      user = cmd.QueryForObject<Vo.User>
		      (CommandType.Text, sql, param);
   }
}

##Class ConnectionFactory.CfCommand

Exemplo de um INSERT retornando o ID.

using (var conn = new CfConnection("DEFAULT"))
{
   using (var cmd = conn.CreateCfCommand())
   {
      var parameters =
         new List<CfParameter>
         {
            new CfParameter("@Name", entity.Name),
            new CfParameter("@TimeStamp", entity.TimeStamp),
            new CfParameter("@IsActive", entity.IsActive),
            new CfParameter("@DisplayName", entity.DisplayName)
         };

      int id = cmd.ExecuteScalar<int>(CommandType.Text,
         @"INSERT INTO SIS_PROFILE
	         (NAME,  UPDATE_TIME, IS_ACTIVE, DISPLAY_NAME)
          VALUES 
	         (@Name, @TimeStamp,  @IsActive, @DisplayName)
           
          SELECT CAST(SCOPE_IDENTITY() AS INT) AS ID"
         , parameters);
   }
}

Executa a Query ou Procedure e retorna uma entidade carregada

Vo.User user;
const string sql = @"SELECT * FROM SIS_USER WHERE ID = @Id";

using (var conn = new CfConnection("DEFAULT"))
{
   using (var cmd = conn.CreateCfCommand())
   {
      var param = new List<CfParameter>
      {
         new CfParameter("@Id", id, DbType.Int32)
      };

      user = cmd.QueryForObject<Vo.User>(CommandType.Text, sql, param);
   }
}

Executa uma query ou procedure e retorna uma Lista de entidades.

IList<Resource> returnValue = null;

string sql = @"SELECT NAME RESOURCE_NAME
               FROM SIS_RESOURCE
               WHERE ENTITY_NAME=@EntityName";

using (var conn = new CfConnection(
	Util.ConnectionNames.DEFAULT.ToString()))
{
    using (var cmd = conn.CreateCfCommand())
	{
       var param = new List<CfParameter>{
          new CfParameter("@EntityName",entityType)};

       returnValue = cmd.QueryForList<Resource>
	       (CommandType.Text,sql,param);

    }
}

Executa uma query ou procedure e retorna um DataReader

IList<string> returnValue = null;
using (var conn = new CfConnection("DEFAULT"))
{
	using (var cmd = conn.CreateCfCommand())
    {
		const string sql = "SELECT NAME FROM SIS_ENTITY";
		using (var reader = cmd.ExecuteReader(CommandType.Text, sql))
		{
			if (reader.HasRows)
			{
	            returnValue = new List<String>();
	            while (reader.Read())
	            {
	                returnValue.Add(reader[0].ToString());
	            }
	        }
	    }
    }
}

return returnValue;

Executa comando SQL sem retorno. Apropriado para INSERT, UPDATE e DELETE

var param =
    new List<CfParameter>
    {
       new CfParameter("@Id", entity.Id),
       new CfParameter("@TimeStamp", entity.TimeStamp),
       new CfParameter("@Name", entity.Name),
       new CfParameter("@IsActive", entity.IsActive),
       new CfParameter("@DisplayName", entity.DisplayName)
    }; 

 using (var conn = new CfConnection("DEFAULT"))
 {
    using (var cmd = conn.CreateCfCommand())
    {
	   //Executa comando SQL sem retorno de valor
       cmd.ExecuteNonQuery(CommandType.Text, 
          @"UPDATE SIS_PROFILE
            SET UPDATE_TIME = @TimeStamp, NAME         = @Name, 
                IS_ACTIVE   = @IsActive,  DISPLAY_NAME = @DisplayName
            WHERE ID = @Id", param);
    }
 }