Пример #1
0
        public List <SBD.DbObjectProperty> GetDbObjectProperties(SBD.DbType dbType, SBD.DbObjectType objectType, DbConnection dbConnection, string objectCatalog, string objectOwner, string objectName)
        {
            List <SBD.DbObjectProperty> dbObjectProperties = new List <SBD.DbObjectProperty>();

            var columns = dbType == SBD.DbType.SqlServer ?
                          dbConnection.GetSchema(objectType == SBD.DbObjectType.Table ? "Columns" : "ViewColumns", new string[] { objectCatalog, objectOwner, objectName }) :
                          dbConnection.GetSchema("Columns", new string[] { objectOwner, objectName });

            var columnNameCol = columns.Columns["COLUMN_NAME"];
            var columnTypeCol = dbType == SBD.DbType.SqlServer ? columns.Columns["DATA_TYPE"] : columns.Columns["DATATYPE"];
            var lengthCol     = dbType == SBD.DbType.SqlServer ? columns.Columns["CHARACTER_MAXIMUM_LENGTH"] : columns.Columns["LENGTH"];
            var nullableCol   = dbType == SBD.DbType.SqlServer ? columns.Columns["IS_NULLABLE"] : columns.Columns["NULLABLE"];

            foreach (DataRow columnRow in columns.Rows)
            {
                var columnName   = (string)columnRow[columnNameCol];
                var columnType   = columnTypeCol == null ? null : (string)columnRow[columnTypeCol];
                var columnLength = lengthCol == null || columnRow.IsNull(lengthCol.Ordinal) ? 0 : int.Parse(columnRow[lengthCol].ToString());
                var isNullable   = nullableCol == null || columnRow.IsNull(nullableCol.Ordinal) ? true : ((string)columnRow[nullableCol]).ToLower()[0] == 'y';

                var dbObjectProperty = new SBD.DbObjectProperty()
                {
                    SchemaName = objectOwner,
                    ObjectName = objectName,
                    Name       = columnName
                };

                dbObjectProperties.Add(dbObjectProperty);
            }
            return(dbObjectProperties);
        }
Пример #2
0
        public List <SBD.DbObjectProperty> GetDbObjectProperties(SBD.DatabaseType dbType, SBD.DbObjectType objectType, DbConnection dbConnection)
        {
            List <SBD.DbObject>         dbObjects          = null;
            List <SBD.DbObjectProperty> dbObjectProperties = new List <SBD.DbObjectProperty>();

            var columns = dbType == SBD.DatabaseType.SqlServer ?
                          dbConnection.GetSchema(objectType == SBD.DbObjectType.Table ? "Columns" : "ViewColumns") :
                          dbConnection.GetSchema("Columns");

            if (dbType == SBD.DatabaseType.Oracle)
            {
                dbObjects = GetDbObjects(dbType, dbConnection, objectType);
            }

            var ownerCol      = dbType == SBD.DatabaseType.SqlServer ? columns.Columns["TABLE_SCHEMA"] : columns.Columns["OWNER"];
            var tableNameCol  = columns.Columns["TABLE_NAME"];
            var columnNameCol = columns.Columns["COLUMN_NAME"];
            var columnTypeCol = dbType == SBD.DatabaseType.SqlServer ? columns.Columns["DATA_TYPE"] : columns.Columns["DATATYPE"];
            var lengthCol     = dbType == SBD.DatabaseType.SqlServer ? columns.Columns["CHARACTER_MAXIMUM_LENGTH"] : columns.Columns["LENGTH"];
            var nullableCol   = dbType == SBD.DatabaseType.SqlServer ? columns.Columns["IS_NULLABLE"] : columns.Columns["NULLABLE"];

            foreach (DataRow columnRow in columns.Rows)
            {
                var objectOwner = (string)columnRow[ownerCol];
                var objectName  = (string)columnRow[tableNameCol];
                if (dbType == SBD.DatabaseType.SqlServer || (dbType == SBD.DatabaseType.Oracle && dbObjects.Any(o => o.SchemaName == objectOwner && o.Name == objectName)))
                {
                    var columnName   = (string)columnRow[columnNameCol];
                    var columnType   = columnTypeCol == null ? null : ((string)columnRow[columnTypeCol]).ToUpper();
                    var columnLength = lengthCol == null || columnRow.IsNull(lengthCol.Ordinal) ? 0 : int.Parse(columnRow[lengthCol].ToString());
                    var isNullable   = nullableCol == null || columnRow.IsNull(nullableCol.Ordinal) ? true : ((string)columnRow[nullableCol]).ToLower()[0] == 'y';

                    var dbObjectProperty = new SBD.DbObjectProperty()
                    {
                        SchemaName   = objectOwner,
                        ObjectName   = objectName,
                        Name         = columnName,
                        ColumnType   = columnType,
                        NetType      = SBD.DbTypeConversion.SqlTypeToNetType(columnType),
                        ColumnLength = columnLength,
                        IsNullable   = isNullable
                    };

                    dbObjectProperties.Add(dbObjectProperty);
                }
            }
            return(dbObjectProperties);
        }