/// <summary> /// Inicializa los campos PrimaryKey de la tabla. /// </summary> /// <param name="table">Objeto ClsTable que debe contener toda la información de la tabla.</param> private void LoadPrimaryKey(Table table) { try { //Query que obtiene los campos keys de la tabla especificada string sSql = string.Format(@"SELECT c.attname FROM pg_index a, pg_class b, pg_attribute c, pg_indexes d, pg_constraint e WHERE d.indexname = e.conname AND a.indrelid = b.oid AND c.attrelid = b.oid AND c.attnum = any(a.indkey) AND e.contype = 'p' AND a.indrelid = e.conrelid AND d.tablename = '{0}' AND indisprimary", table.NameTable); String campo; DataSet dtPrimaryKeys = _conection.InitDataAdapter(sSql); DataTable dtTables = dtPrimaryKeys.Tables[0]; //Almacenamos las primaryKey de las tablas. foreach (DataRow drKeys in dtTables.Rows) { campo = drKeys["attname"].ToString().Trim(); //Busca la columna y le indica que es primaryKey del objeto ClsTable. Column oColumn = table.ColColums.Find(oCol => oCol.NameColumn == campo ); if (oColumn != null) { oColumn.PrimaryKey = true; table.ColPrimaryKey.Add(oColumn.NameColumn); } else { ClsTraccer.RunException( "Error al obtener las primary keys de la tabla " + table.NameTable + " - " + drKeys["attname"].ToString().Trim(), "GetPrimaryKey"); } } } catch (Exception ex) { ClsTraccer.RunException(ex, "Error al obtener las primary keys de la tabla " + table.NameTable, "GetPrimaryKey"); } }
/// <summary> /// Carga la estructura de una tabla(Columnas). /// </summary> /// <param name="sNombreTable">Nombre de la tabla.</param> /// <returns>Devuelve un objeto del tipo ClsTable.</returns> private Table LoadTable(String sNombreTable) { var oTable = new Table(_nameTable, new List<string>(), new List<Column>()); DataTable dtTable; try { dtTable = _conection.DbConnection.GetSchema("Columns", new[] {null, null, sNombreTable, null}); //Recorremos todos los registros, para obtener las propiedades de cada una de las columnas de la tabla. foreach (DataRow row in dtTable.Rows) { using (var oColumn = new Column()) { //recorre cada propiedad del campo foreach (DataColumn col in dtTable.Columns) { switch (col.ColumnName.ToUpper()) { case "DATA_TYPE": //Tipo de datos oColumn.DataType = row[col].ToString(); break; case "CHARACTER_MAXIMUM_LENGTH": //Longitud del campo oColumn.FieldLenght = (row[col].ToString() == "") ? 0 : int.Parse(row[col].ToString()); break; case "IS_NULLABLE": //Permite valores nulos oColumn.IsNull = (row[col].ToString() == "YES"); break; case "COLUMN_DEFAULT": //Valor por defecto oColumn.DefaultData = (row[col].ToString() == "") ? "Null" : row[col].ToString(); break; case "COLUMN_NAME": //Nombre del campo oColumn.NameColumn = row[col].ToString(); break; } } oTable.ColColums.Add(oColumn); } } LoadPrimaryKey(oTable); } catch (Exception ex) { ClsTraccer.RunException(ex, "Error al inicializar el esquema de la tabla " + _nameTable, "LoadTable overloads1"); } return oTable; }