MngDatos Classes
TheMngDatos* family of classes implements data access operations for specific business domains. Each class contains static methods that execute SQL queries and return strongly-typed results.
Common Classes
| Class | Domain | Key Operations |
|---|---|---|
MngDatosComision | Travel commissions | Query commissions, insert/update commission records |
MngDatosUsuarios | Users | User lookup, role retrieval, personal data |
MngDatosViaticos | Travel allowances | Zone rates, allowance calculations |
MngDatosProyecto | Projects | Project catalogs, assignments |
MngDatosCatalogos | Catalogs | Lookup tables (states, cities, types) |
MngActualizaDatos | Updates | User profile updates, data modifications |
Query Operations (SELECT)
Single Record Retrieval
Retrieving a single entity from the database:- Uses
while (Reader.Read())even for single records - Properties populated directly from DataReader
- Returns populated entity object
- Empty object returned if no records found
Collection Retrieval
Retrieving multiple records into a list:- Initialize empty list before populating
- Commonly add default “SELECCIONE” option for dropdowns
- Create new entity instance for each row
- Return list even if empty (never null)
Scalar Value Retrieval
Retrieving single calculated or aggregated values:Scalar queries use
if (Reader.Read()) instead of while since only one row is expected. Always provide a default value for empty results.Insert Operations
Basic Insert Pattern
- Returns
Booleanindicating success - Uses
ExecuteNonQuery()instead ofExecuteReader() - Checks if exactly 1 row was affected
- Date formatting via
clsFunciones.FormatFecha()
Complex Insert with Entity Object
Sequence Number Generation
Update Operations
Basic Update Pattern
- Always update
FECHEFF(effective date) field - Include
ESTATUS = '1'in WHERE clause (active records only) - Return false if no rows were updated
- Entity object provides values, but query builds SQL
Conditional Update
DataTable and DataSet Usage
While most SMAF DAL methods useMySqlDataReader for performance, some scenarios use DataTable or DataSet:
DataTable Pattern
- Binding directly to grid controls
- Exporting to Excel/PDF
- Need for disconnected data manipulation
- Multiple result sets (use
DataSet)
Transaction Management
Current Implementation
SMAF’s DAL does not currently implement explicit transactions. Each operation executes in its own implicit transaction:Recommended Transaction Pattern
For operations requiring atomicity, implement transactions:Transaction Guidelines:
- Use transactions when multiple related operations must succeed together
- Keep transaction scope as small as possible
- Always include try-catch with rollback
- Dispose connection after commit or rollback
Parameterized Queries
Current Implementation
SMAF primarily uses string concatenation for query construction:Recommended Parameterized Pattern
Common Data Patterns
Dropdown/Catalog Lists
Existence Checks
Best Practices Summary
DAL Operation Checklist:✓ Always close
MySqlDataReader before disposing connection✓ Always call disposeConexionSMAF() after operations✓ Return empty collections/objects instead of null for failed queries✓ Use Convert.ToString() for all DataReader field access✓ Format dates with clsFunciones.FormatFecha()✓ Check ExecuteNonQuery() == 1 for single-row operations✓ Provide default “SELECCIONE” options for dropdown lists✓ Include ESTATUS = '1' filters for active records✓ Update FECHEFF timestamp on all modifications✓ Consider transactions for multi-step operations