コード例 #1
0
 private String GetValueObject(Column oColumn, Object sValue)
 {
     if (sValue == null)
     {
         if (!oColumn.IsNull)
             sValue = "NULL";
         else if (!String.IsNullOrEmpty(oColumn.DefaultData))
             sValue = oColumn.DefaultData;
         else
             //todo:MEJORA. Quitar las exception y sustituir por una clase de negocio.
             throw new ArgumentException("El campo " + oColumn.NameColumn + "No puede ser nulo", ToString());
     }
     else
         sValue = TypeData(oColumn, sValue.ToString());
     return sValue.ToString();
 }
コード例 #2
0
        /// <summary>
        ///     Devuelve el valor del campo con su valor correspondiente formateado.
        /// </summary>
        /// <param name="oColumn">Objeto ClsColumn, contiene toda la información sobre la columna de la tabla</param>
        /// <param name="sValue">Valor para el campo</param>
        /// <returns>Devuelve el valor formateado.</returns>
        private String TypeData(Column oColumn, String sValue)
        {
            String sComilla = "";
            switch (oColumn.DataType)
            {
                case "int4":
                case "int8":
                case "int2":
                    if (ClsGeneral.IsNumeric(sValue))
                        //si viene con decimales se los quita
                        sValue = int.Parse(sValue).ToString();
                    else if (sValue.ToUpper() == "NULL")
                        //no hace nada (se supone que el campo admite valores NULL)
                        break;
                    else
                        sValue = "0";

                    break;

                case "varchar":
                case "text":
                    if (!String.IsNullOrEmpty(sValue))
                    {
                        //todo:MEJORA. Quitar las exception y sustituir por una clase de negocio.
                        if (sValue.Length > oColumn.FieldLenght)
                            throw new ArgumentException(
                                "El valor del campo " + oColumn.NameColumn + " ha superado la longuitud.", ToString());

                        sComilla = "'";
                    }
                    else
                        sValue = "NULL";
                    break;
                    //timestamp, es como para utilizar un identificador o para marcar la versión de actualización de la Columna.
                    //Si voy a trabajar con fechas mejor utilizar campos Date o DataTime.
                    //Pienso que los campos TimesTamp, se deberían usar para la auditoría.
                case "timestamp":
                case "date":
                case "timetz":
                    if (ClsGeneral.IsDate(sValue))
                    {
                        sComilla = "'";
                        //ISO 8601. Formato de las fecha utilizado por la base de datos Postgres.
                        sValue = DateTime.Parse(sValue).ToString("yyyy-MM-dd hh:mm:ss");
                    }
                    else
                        sValue = "NULL";

                    break;

                case "bool":
                    if (String.IsNullOrEmpty(sValue))
                        sValue = "NULL";
                    else
                        sValue = sValue.ToUpper();
                    break;
                    //Todo. Mirar como se comportan los campos númericos, para devolver una excepcion. En el caso
                    //de exceder de la longuitud máxima.
                case "float8":
                case "numeric":
                    if (ClsGeneral.IsNumeric(sValue))
                        //convierte la coma en punto
                        sValue = sValue.Replace(",", ".");
                    else if (sValue.ToUpper() == "NULL")
                        //no hace nada (se supone que el campo admite valores NULL)
                        break;
                    else
                        sValue = "0";

                    break;
            }
            return sComilla + sValue + sComilla;
        }
コード例 #3
0
        /// <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;
        }