Continuação da classe DAL Genérica.
private List ExecProcSelectFilter(T pObj)
{
object[] atributos = null;
AttParamProcDB attProcDB = null;
IDbCommand command = null;
IDbDataParameter param = null;
IDbDataAdapter adp = null;
List retorno = null;
DataSet ds = null;
try
{
this.ValidateUsageCustomAttributes();
if (this._dbManager == null || this._dbManager.Conn == null)
{
throw new GenericDALException("Utilize um dos métodos 'TransactionScope' para setar o escopo da transacao atual");
}
foreach (PropertyInfo piInfo in pObj.GetType().GetProperties())
{
atributos = piInfo.GetCustomAttributes(false);
if (atributos != null && atributos.Length > 0)
{
foreach (object att in atributos)
{
if (att is AttParamProcDB)
{
attProcDB = (AttParamProcDB)att;
if (attProcDB.TipoProcedure == ProcedureTypes.SelectFilter)
{
if (command == null || String.IsNullOrEmpty(command.CommandText))
{
command = this._dbManager.Conn.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = attProcDB.ProcName;
command.Transaction = this._dbManager.Trans;
}
if (command != null && attProcDB.TipoProcedure != ProcedureTypes.SelectNoFilter)
{
param = command.CreateParameter();
param.ParameterName = attProcDB.ParamName;
param.DbType = attProcDB.DbType;
param.Direction = attProcDB.Direction;
if (attProcDB.Direction == ParameterDirection.Input)
{
param.Value = piInfo.GetValue(pObj, null);
}
else
{
piInfo.SetValue(pObj, param.Value, null);
param.Size = 1000;
}
command.Parameters.Add(param);
}
}
}
}
}
}
adp = this._dbManager.Adp;
adp.SelectCommand = command;
ds = new DataSet();
adp.Fill(ds);
retorno = this.DataSetToList(ds);
}
catch (Exception ex)
{
this._dbManager.Trans.Rollback();
this._dbManager.Conn.Close();
throw ex;
}
finally
{
atributos = null;
attProcDB = null;
command = null;
param = null;
adp = null;
ds = null;
}
return retorno;
}
private List ExecProcSelectNoFilter()
{
IDbCommand command = null;
IDbDataAdapter adp = null;
bool flagIsTrans = true;
List retorno = null;
DataSet ds = null;
string procName = "";
T Obj = new T();
AttProcNameSelectNoFilter attribute = null;
try
{
this.ValidateUsageCustomAttributes();
if (this._dbManager == null)
{
throw new GenericDALException("Utilize um dos métodos 'TransactionScope' para setar o escopo da transacao atual");
}
if (Obj.GetType().GetCustomAttributes(typeof(AttProcNameSelectNoFilter), false)[0] != null)
{
attribute = (AttProcNameSelectNoFilter)Obj.GetType().GetCustomAttributes(typeof(AttProcNameSelectNoFilter), false)[0];
procName = attribute.ProcName;
if (!String.IsNullOrEmpty(procName))
{
if (command == null || String.IsNullOrEmpty(command.CommandText))
{
command = this._dbManager.Conn.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = procName;
command.Transaction = this._dbManager.Trans;
adp = this._dbManager.Adp;
adp.SelectCommand = command;
ds = new DataSet();
adp.Fill(ds);
retorno = this.DataSetToList(ds);
}
}
}
}
catch (Exception ex)
{
this._dbManager.Trans.Rollback();
this._dbManager.Conn.Close();
throw ex;
}
finally
{
command = null;
adp = null;
ds = null;
procName = null;
Obj = default(T);
attribute = null;
}
return retorno;
}
#endregion
#region Protected Execute Procedures Methods
protected List ExecuteProcSelectFilter(T pObj)
{
return this.ExecProcSelectFilter(pObj);
}
protected List ExecuteProcSelectNoFilter()
{
return this.ExecProcSelectNoFilter();
}
protected void ExecuteProcInsert(T pObj)
{
this.ExecProc(pObj, ProcedureTypes.Insert);
}
protected void ExecuteProcDelete(T pObj)
{
this.ExecProc(pObj, ProcedureTypes.Delete);
}
///
protected void ExecuteProcUpdate(T pObj)
{
this.ExecProc(pObj, ProcedureTypes.Update);
}
#endregion
}
}