private void InsertPropertyField(ApplicationObject metaObject, SqlFieldInfo fieldInfo)
        {
            IApplicationObjectFactory factory = MetadataManager.GetFactory(metaObject.GetType());

            if (factory == null)
            {
                return;
            }

            string propertyName = factory.PropertyFactory.GetPropertyName(fieldInfo);

            if (string.IsNullOrEmpty(propertyName))
            {
                propertyName = fieldInfo.COLUMN_NAME;
            }

            // Проверка нужна для свойств, имеющих составной тип данных
            MetadataProperty property = metaObject.Properties.Where(p => p.Name == propertyName).FirstOrDefault();

            if (property == null)
            {
                property = factory.PropertyFactory.CreateProperty(metaObject, propertyName, fieldInfo);
                metaObject.Properties.Add(property);
            }
            else if (property.Fields.Where(f => f.Name == fieldInfo.COLUMN_NAME).FirstOrDefault() != null)
            {
                return; // поле добавлять не надо
            }

            property.Fields.Add(factory.PropertyFactory.CreateField(fieldInfo));
        }
Exemplo n.º 2
0
        private List <SqlFieldInfo> MS_GetSqlFieldsOrderedByName(string tableName)
        {
            List <SqlFieldInfo> list = new List <SqlFieldInfo>();

            using (SqlConnection connection = new SqlConnection(ConnectionString))
                using (SqlCommand command = new SqlCommand(SelectSqlFieldsOrderedByNameScript(), connection))
                {
                    command.Parameters.AddWithValue("tableName", tableName);
                    connection.Open();
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            SqlFieldInfo item = new SqlFieldInfo();
                            item.ORDINAL_POSITION         = reader.GetInt32(0);
                            item.COLUMN_NAME              = reader.GetString(1);
                            item.DATA_TYPE                = reader.GetString(2);
                            item.CHARACTER_OCTET_LENGTH   = reader.GetInt16(3);
                            item.CHARACTER_MAXIMUM_LENGTH = reader.GetInt16(4);
                            item.NUMERIC_PRECISION        = reader.GetByte(5);
                            item.NUMERIC_SCALE            = reader.GetByte(6);
                            item.IS_NULLABLE              = reader.GetBoolean(7);
                            list.Add(item);
                        }
                    }
                }
            return(list);
        }
Exemplo n.º 3
0
        private List <SqlFieldInfo> GetSqlFields(string tableName)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(@"SELECT");
            sb.AppendLine(@"    ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE,");
            sb.AppendLine(@"    ISNULL(CHARACTER_MAXIMUM_LENGTH, 0) AS CHARACTER_MAXIMUM_LENGTH,");
            sb.AppendLine(@"    ISNULL(NUMERIC_PRECISION, 0) AS NUMERIC_PRECISION,");
            sb.AppendLine(@"    ISNULL(NUMERIC_SCALE, 0) AS NUMERIC_SCALE,");
            sb.AppendLine(@"    CASE WHEN IS_NULLABLE = 'NO' THEN CAST(0x00 AS bit) ELSE CAST(0x01 AS bit) END AS IS_NULLABLE");
            sb.AppendLine(@"FROM");
            sb.AppendLine(@"    INFORMATION_SCHEMA.COLUMNS");
            sb.AppendLine(@"WHERE");
            sb.AppendLine(@"    TABLE_NAME = N'{0}'");
            sb.AppendLine(@"ORDER BY");
            sb.AppendLine(@"    ORDINAL_POSITION ASC;");

            string sql = string.Format(sb.ToString(), tableName);

            List <SqlFieldInfo> list = new List <SqlFieldInfo>();

            using (SqlConnection connection = new SqlConnection(this.ConnectionString))
            {
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    connection.Open();
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            SqlFieldInfo item = new SqlFieldInfo()
                            {
                                ORDINAL_POSITION         = reader.GetInt32(0),
                                COLUMN_NAME              = reader.GetString(1),
                                DATA_TYPE                = reader.GetString(2),
                                CHARACTER_MAXIMUM_LENGTH = reader.GetInt32(3),
                                NUMERIC_PRECISION        = reader.GetByte(4),
                                NUMERIC_SCALE            = reader.GetByte(5),
                                IS_NULLABLE              = reader.GetBoolean(6)
                            };
                            list.Add(item);
                        }
                    }
                }
            }
            return(list);
        }
        private void UpdatePropertyField(MetadataProperty property, SqlFieldInfo field)
        {
            if (field.DATA_TYPE != "nchar" &&
                field.DATA_TYPE.StartsWith("mchar") &&
                field.DATA_TYPE != "nvarchar" &&
                field.DATA_TYPE.StartsWith("mvarchar") &&
                field.DATA_TYPE != "numeric")
            {
                return;
            }

            DatabaseField f = property.Fields.Where(f => f.Name == field.COLUMN_NAME).FirstOrDefault();

            if (f == null)
            {
                return;
            }
            f.TypeName   = field.DATA_TYPE;
            f.Length     = field.CHARACTER_OCTET_LENGTH;
            f.Scale      = field.NUMERIC_SCALE;
            f.Precision  = field.NUMERIC_PRECISION;
            f.IsNullable = field.IS_NULLABLE;
        }
Exemplo n.º 5
0
        private List <SqlFieldInfo> PG_GetSqlFieldsOrderedByName(string tableName)
        {
            List <SqlFieldInfo> list = new List <SqlFieldInfo>();
            string script            = SelectSqlFieldsOrderedByNameScript();

            script = script.Replace("{tableName}", tableName.ToLowerInvariant());
            using (NpgsqlConnection connection = new NpgsqlConnection(ConnectionString))
                using (NpgsqlCommand command = new NpgsqlCommand(script, connection))
                {
                    connection.Open();
                    using (NpgsqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            SqlFieldInfo item = new SqlFieldInfo();
                            item.COLUMN_NAME = reader.GetString(0);
                            item.DATA_TYPE   = reader.GetString(1);
                            list.Add(item);
                        }
                    }
                }
            return(list);
        }