示例#1
0
        protected override IEnumerable <Table> GetTables(IDatabase database, RestrictionDictionary restrictionValues)
        {
            var connpar = GetConnectionParameter(database);

            string tableType = null;

            switch (restrictionValues.GetValue(nameof(Table.Type)))
            {
            case null:
            case "0":
                tableType = "TABLE";
                break;

            case "1":
                tableType = "SYSTEM TABLE";
                break;
            }

            var restrictions = new[] { connpar?.Database, null, restrictionValues.GetValue(nameof(Table.Name)), tableType };
            var conn         = (OleDbConnection)database.Connection;

            conn.TryOpen(true);

            foreach (DataRow row in conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, restrictions).Rows)
            {
                yield return(new Table
                {
                    Catalog = row["TABLE_CATALOG"].ToString(),
                    Schema = row["TABLE_SCHEMA"].ToString(),
                    Name = row["TABLE_NAME"].ToString(),
                    Type = row["TABLE_TYPE"].ToString() == "TABLE" ? TableType.BaseTable : TableType.SystemTable,
                    Description = ""
                });
            }
        }
示例#2
0
        protected override IEnumerable <Column> GetColumns(IDatabase database, RestrictionDictionary restrictionValues)
        {
            var restrictions = new[] { null, null, restrictionValues.GetValue(nameof(Column.TableName)), restrictionValues.GetValue(nameof(Column.Name)) };
            var conn         = (OleDbConnection)database.Connection;

            conn.TryOpen(true);

            var tbPrimary = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, new[] { null, null, restrictionValues.GetValue(nameof(Column.TableName)) });

            foreach (DataRow row in conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, restrictions).Rows)
            {
                yield return(new Column
                {
                    Catalog = row["TABLE_CATALOG"].ToString(),
                    Schema = row["TABLE_SCHEMA"].ToString(),
                    TableName = row["TABLE_NAME"].ToString(),
                    Name = row["COLUMN_NAME"].ToString(),
                    Default = row["COLUMN_DEFAULT"].ToString(),
                    DataType = row["DATA_TYPE"].ToString(),
                    NumericPrecision = row["NUMERIC_PRECISION"].To <int>(),
                    NumericScale = row["NUMERIC_SCALE"].To <int>(),
                    IsNullable = row["IS_NULLABLE"] != DBNull.Value && row["IS_NULLABLE"].To <bool>(),
                    Length = row["CHARACTER_MAXIMUM_LENGTH"].To <long>(),
                    Position = row["ORDINAL_POSITION"].To <int>(),
                    IsPrimaryKey = tbPrimary.Select($"TABLE_NAME = '{row["TABLE_NAME"].ToString().Replace("\"", "").Replace("'", "")}' AND COLUMN_NAME='{row["COLUMN_NAME"].ToString()}'").Length > 0
                });
            }
        }
示例#3
0
        protected override IEnumerable <ForeignKey> GetForeignKeys(IDatabase database, RestrictionDictionary restrictionValues)
        {
            var restrictions = new[] { null, null, restrictionValues.GetValue(nameof(ForeignKey.TableName)), restrictionValues.GetValue(nameof(ForeignKey.Name)) };
            var conn         = (OleDbConnection)database.Connection.TryOpen();

            foreach (DataRow row in conn.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, restrictions).Rows)
            {
                yield return(new ForeignKey
                {
                    Catalog = row["FK_TABLE_CATALOG"].ToString(),
                    Schema = row["FK_TABLE_SCHEMA"].ToString(),
                    Name = row["FK_NAME"].ToString(),
                    PKTable = row["PK_TABLE_NAME"].ToString(),
                    PKColumn = row["PK_COLUMN_NAME"].ToString(),
                    TableName = row["FK_TABLE_NAME"].ToString(),
                    ColumnName = row["FK_COLUMN_NAME"].ToString()
                });
            }
        }