Example #1
0
        public static OdDbType GetOdDbTypeFromColType(Type fieldType, CrudSpecialColType specialType)
        {
            if (specialType.HasFlag(CrudSpecialColType.DateEntry) ||
                specialType.HasFlag(CrudSpecialColType.DateEntryEditable))
            {
                return(OdDbType.Date);
            }
            if (specialType.HasFlag(CrudSpecialColType.TimeStamp))
            {
                return(OdDbType.DateTimeStamp);
            }
            if (specialType.HasFlag(CrudSpecialColType.DateT) ||
                specialType.HasFlag(CrudSpecialColType.DateTEntry) ||
                specialType.HasFlag(CrudSpecialColType.DateTEntryEditable))
            {
                return(OdDbType.DateTime);
            }
            if (specialType.HasFlag(CrudSpecialColType.EnumAsString))
            {
                return(OdDbType.VarChar255);
            }
            if (specialType.HasFlag(CrudSpecialColType.TimeSpanNeg))
            {
                return(OdDbType.TimeSpan);
            }
            if (specialType.HasFlag(CrudSpecialColType.TimeSpanLong))
            {
                return(OdDbType.Long);
            }
            if (specialType.HasFlag(CrudSpecialColType.TextIsClob))
            {
                return(OdDbType.Text);
            }
            if (fieldType.IsEnum)
            {
                return(OdDbType.Enum);
            }
            switch (fieldType.Name)
            {
            default:
                throw new ApplicationException("Type not yet supported: " + fieldType.Name);

            case "Bitmap":
                return(OdDbType.Text);

            case "Boolean":
                return(OdDbType.Bool);

            case "Byte":
                return(OdDbType.Byte);

            case "Color":
                return(OdDbType.Int);

            case "DateTime":                    //This is only for date, not dateT
                return(OdDbType.Date);

            case "Double":
                return(OdDbType.Currency);

            case "Interval":
                return(OdDbType.Int);

            case "Int64":
                return(OdDbType.Long);

            case "Int32":
                return(OdDbType.Int);

            case "Single":
                return(OdDbType.Float);

            case "String":
                return(OdDbType.VarChar255);                       //or text

            case "TimeSpan":
                return(OdDbType.TimeOfDay);
            }
        }
Example #2
0
        public static void ValidateColumn(string dbName, string tablename, FieldInfo field, DataTable table)
        {
            if (!tablename.In(           //The ehrlab tables have already been released with long column names.  We might fix later.
                    "ehrlab", "ehrlabresult", "ehrlabresultscopyto", "ehrlabspecimencondition", "ehrlabspecimenrejectreason",
                    "triagemetric"))     //Hq only table
            {
                if (field.Name.Length > 30)
                {
                    throw new ApplicationException("Column name longer than 30 characters.  Invalid for Oracle.  Shorten the column name.  See " + tablename + "." + field.Name);
                }
            }
            //make sure the column exists
            string dataTypeInDb = "";

            for (int i = 0; i < table.Rows.Count; i++)
            {
                if (table.Rows[i]["COLUMN_NAME"].ToString().ToLower() == field.Name.ToLower())
                {
                    dataTypeInDb = table.Rows[i]["DATA_TYPE"].ToString();
                }
            }
            if (dataTypeInDb == "")
            {
                return;                //can't validate
            }
            CrudSpecialColType specialColType    = GetSpecialType(field);
            string             dataTypeExpected  = "";
            string             dataTypeExpected2 = "";//if an alternate datatype is allowed
            string             dataTypeExpected3 = "";

            if (specialColType.HasFlag(CrudSpecialColType.TimeStamp))
            {
                dataTypeExpected = "timestamp";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.TimeSpanLong))
            {
                dataTypeExpected = "bigint";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.DateEntry))
            {
                dataTypeExpected = "date";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.DateEntryEditable))
            {
                dataTypeExpected = "date";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.DateT))
            {
                dataTypeExpected = "datetime";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.DateTEntry))
            {
                dataTypeExpected = "datetime";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.DateTEntryEditable))
            {
                dataTypeExpected = "datetime";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.TinyIntSigned))
            {
                dataTypeExpected = "tinyint";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.EnumAsString))
            {
                dataTypeExpected = "varchar";
            }
            else if (specialColType.HasFlag(CrudSpecialColType.TextIsClob))
            {
                dataTypeExpected  = "text";
                dataTypeExpected2 = "mediumtext";
                dataTypeExpected3 = "longtext";
            }
            else if (field.FieldType.IsEnum)
            {
                dataTypeExpected  = "tinyint";
                dataTypeExpected2 = "int";
                dataTypeExpected3 = "smallint";
            }
            else
            {
                switch (field.FieldType.Name)
                {
                default:
                    throw new ApplicationException("Type not yet supported: " + field.FieldType.Name);

                case "Bitmap":
                    dataTypeExpected  = "mediumtext";
                    dataTypeExpected2 = "text";                  //only for very small images
                    break;

                case "Boolean":
                    dataTypeExpected = "tinyint";
                    break;

                case "Byte":
                    dataTypeExpected = "tinyint";
                    break;

                case "Color":
                    dataTypeExpected = "int";
                    break;

                case "DateTime":
                    dataTypeExpected = "date";                  //If the mysql field is datetime, then the C# field should have an [attribute] describing the type.
                    break;

                case "Double":
                    dataTypeExpected = "double";
                    break;

                case "Interval":
                    dataTypeExpected = "int";
                    break;

                case "Int64":
                    dataTypeExpected = "bigint";
                    break;

                case "Int32":
                    //use C# int for ItemOrder style fields.  We know they will not use random keys.
                    dataTypeExpected  = "int";
                    dataTypeExpected2 = "smallint";                  //ok as long as the coding is careful.  Less than ideal.
                    //tinyint not allowed.  Possibly change C# type to byte if values can be between 0 and 255 with no negatives.
                    //We might some day use SByte for values that can be -127 to 127.  Example, perio depths, percentages that allow -1, etc.  For now, those are smallint.
                    break;

                case "Single":
                    dataTypeExpected  = "float";                 //not 1:1, but we never use the full range anyway.
                    dataTypeExpected2 = "float unsigned";
                    break;

                case "String":
                    dataTypeExpected  = "varchar";
                    dataTypeExpected3 = "char";
                    //text, mediumtext, or longtext should be marked TextIsClob
                    break;

                case "TimeSpan":
                    dataTypeExpected = "time";
                    break;
                }
            }
            if (!dataTypeInDb.In(dataTypeExpected, dataTypeExpected2, dataTypeExpected3))
            {
                throw new Exception(tablename + "." + field.Name + " type mismatch.  Look in the lines of code above for case \"" + field.FieldType.Name
                                    + "\".  The types listed are what is allowed in the mysql database.  " + dataTypeInDb + " is not one of the allowed mysql types.");
            }
        }