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)); }
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); }
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; }
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); }