-
Notifications
You must be signed in to change notification settings - Fork 3
Tutorial
Anderson Fernandes do Nascimento edited this page Sep 22, 2015
·
2 revisions
<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 TransactionScope
pode 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);
}
}