Esempio n. 1
0
        DataTable IPlugin.GetTableColumns(string database, string table)
        {
            DataTable        metaData = new DataTable();
            IVistaDBDatabase db       = null;

            try
            {
                metaData = context.CreateColumnsDataTable();

                using (VistaDBConnection cn = new VistaDBConnection(context.ConnectionString))
                {
                    db = DDA.OpenDatabase(this.GetFullDatabaseName(), VistaDBDatabaseOpenMode.NonexclusiveReadOnly, GetPassword(cn));
                }

                ArrayList tables = db.EnumTables();

                IVistaDBTableSchema tblStructure = db.TableSchema(table);

                foreach (IVistaDBColumnAttributes c in tblStructure)
                {
                    string colName = c.Name;

                    string def = "";
                    if (tblStructure.Defaults.Contains(colName))
                    {
                        def = tblStructure.Defaults[colName].Expression;
                    }
                    int width     = c.MaxLength;                     //c.ColumnWidth;
                    int dec       = 0;                               //c.ColumnDecimals;
                    int length    = 0;
                    int octLength = width;

                    IVistaDBIdentityInformation identity = null;
                    if (tblStructure.Identities.Contains(colName))
                    {
                        identity = tblStructure.Identities[colName];
                    }

                    string[] pks = null;
                    if (tblStructure.Indexes.Contains("PrimaryKey"))
                    {
                        pks = tblStructure.Indexes["PrimaryKey"].KeyExpression.Split(';');
                    }
                    else
                    {
                        foreach (IVistaDBIndexInformation pk in tblStructure.Indexes)
                        {
                            if (pk.Primary)
                            {
                                pks = pk.KeyExpression.Split(';');
                                break;
                            }
                        }
                    }

                    System.Collections.Hashtable pkCols = null;
                    if (pks != null)
                    {
                        pkCols = new Hashtable();
                        foreach (string pkColName in pks)
                        {
                            pkCols[pkColName] = true;
                        }
                    }

                    switch (c.Type)
                    {
                    case VistaDBType.Char:
                    case VistaDBType.NChar:
                    case VistaDBType.NText:
                    case VistaDBType.NVarChar:
                    case VistaDBType.Text:
                    case VistaDBType.VarChar:
                        length = width;
                        width  = 0;
                        dec    = 0;
                        break;

                    case VistaDBType.Money:
                    case VistaDBType.Float:
                    case VistaDBType.Decimal:
                    case VistaDBType.Real:
                        break;

                    default:
                        width = 0;
                        dec   = 0;
                        break;
                    }

                    DataRow row = metaData.NewRow();
                    metaData.Rows.Add(row);

                    row["TABLE_NAME"]               = tblStructure.Name;
                    row["COLUMN_NAME"]              = c.Name;
                    row["ORDINAL_POSITION"]         = c.RowIndex;
                    row["IS_NULLABLE"]              = c.AllowNull;
                    row["COLUMN_HASDEFAULT"]        = def == string.Empty ? false : true;
                    row["COLUMN_DEFAULT"]           = def;
                    row["IS_AUTO_KEY"]              = identity == null ? false : true;
                    row["AUTO_KEY_SEED"]            = 1;
                    row["AUTO_KEY_INCREMENT"]       = identity == null ? 0 : Convert.ToInt32(identity.StepExpression);
                    row["TYPE_NAME"]                = c.Type.ToString();
                    row["NUMERIC_PRECISION"]        = width;
                    row["NUMERIC_SCALE"]            = dec;
                    row["CHARACTER_MAXIMUM_LENGTH"] = length;
                    row["CHARACTER_OCTET_LENGTH"]   = octLength;
                    row["DESCRIPTION"]              = c.Description;

                    string type = (string)row["TYPE_NAME"];
                    row["TYPE_NAME_COMPLETE"] = this.GetDataTypeNameComplete(type, length, (short)width, (short)dec);

                    if (c.Type == VistaDBType.Timestamp)
                    {
                        row["IS_COMPUTED"] = true;
                    }

                    row["IS_CONCURRENCY"] = type == "Timestamp" ? true : false;
                }
            }
            finally
            {
                if (db != null)
                {
                    db.Close();
                }
            }

            return(metaData);
        }
Esempio n. 2
0
        public DataTable GetColumns(string tableName)
        {
            DataTable metaData = new DataTable();

            //metaData.Columns.Add("TABLE_CATALOG", Type.GetType("System.String"));
            //metaData.Columns.Add("TABLE_SCHEMA", Type.GetType("System.String"));
            //metaData.Columns.Add("TABLE_NAME", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_NAME", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_GUID", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_PROPID", Type.GetType("System.String"));
            //metaData.Columns.Add("ORDINAL_POSITION", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_HASDEFAULT", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_DEFAULT", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_FLAGS", Type.GetType("System.String"));
            //metaData.Columns.Add("IS_NULLABLE", Type.GetType("System.String"));
            //metaData.Columns.Add("DATA_TYPE", Type.GetType("System.String"));
            //metaData.Columns.Add("TYPE_GUID", Type.GetType("System.String"));
            //metaData.Columns.Add("CHARACTER_MAXIMUM_LENGTH", Type.GetType("System.String"));
            //metaData.Columns.Add("CHARACTER_OCTET_LENGTH", Type.GetType("System.String"));
            //metaData.Columns.Add("NUMERIC_PRECISION", Type.GetType("System.String"));
            //metaData.Columns.Add("NUMERIC_SCALE", Type.GetType("System.String"));
            //metaData.Columns.Add("DATETIME_PRECISION", Type.GetType("System.String"));
            //metaData.Columns.Add("CHARACTER_SET_CATALOG", Type.GetType("System.String"));
            //metaData.Columns.Add("CHARACTER_SET_SCHEMA", Type.GetType("System.String"));
            //metaData.Columns.Add("CHARACTER_SET_NAME", Type.GetType("System.String"));
            //metaData.Columns.Add("COLLATION_CATALOG", Type.GetType("System.String"));
            //metaData.Columns.Add("COLLATION_SCHEMA", Type.GetType("System.String"));
            //metaData.Columns.Add("COLLATION_NAME", Type.GetType("System.String"));
            //metaData.Columns.Add("DOMAIN_CATALOG", Type.GetType("System.String"));
            //metaData.Columns.Add("DOMAIN_SCHEMA", Type.GetType("System.String"));
            //metaData.Columns.Add("DOMAIN_NAME", Type.GetType("System.String"));
            //metaData.Columns.Add("DESCRIPTION", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_LCID", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_COMPFLAGS", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_SORTID", Type.GetType("System.String"));
            //metaData.Columns.Add("COLUMN_TDSCOLLATION", Type.GetType("System.String"));
            //metaData.Columns.Add("IS_COMPUTED", Type.GetType("System.String"));
            //metaData.Columns.Add("IS_AUTO_KEY", Type.GetType("System.String"));
            //metaData.Columns.Add("AUTO_KEY_SEED", Type.GetType("System.String"));
            //metaData.Columns.Add("AUTO_KEY_INCREMENT", Type.GetType("System.String"));

            metaData.Columns.Add("TABLE_NAME", Type.GetType("System.String"));
            metaData.Columns.Add("COLUMN_NAME", Type.GetType("System.String"));
            metaData.Columns.Add("ORDINAL_POSITION", Type.GetType("System.Int32"));
            metaData.Columns.Add("IS_NULLABLE", Type.GetType("System.Boolean"));
            metaData.Columns.Add("COLUMN_HASDEFAULT", Type.GetType("System.Boolean"));
            metaData.Columns.Add("COLUMN_DEFAULT", Type.GetType("System.String"));
            metaData.Columns.Add("IS_AUTO_KEY", Type.GetType("System.Boolean"));
            metaData.Columns.Add("AUTO_KEY_SEED", Type.GetType("System.Int32"));
            metaData.Columns.Add("AUTO_KEY_INCREMENT", Type.GetType("System.Int32"));
            metaData.Columns.Add("DATA_TYPE_NAME", Type.GetType("System.String"));
            metaData.Columns.Add("NUMERIC_PRECISION", Type.GetType("System.Int32"));
            metaData.Columns.Add("NUMERIC_SCALE", Type.GetType("System.Int32"));
            metaData.Columns.Add("CHARACTER_MAXIMUM_LENGTH", Type.GetType("System.Int32"));
            metaData.Columns.Add("CHARACTER_OCTET_LENGTH", Type.GetType("System.Int32"));
            metaData.Columns.Add("DESCRIPTION", Type.GetType("System.String"));
            metaData.Columns.Add("IS_PRIMARY_KEY", Type.GetType("System.Boolean"));

            IVistaDBDatabase db     = DDA.OpenDatabase(dbName, VistaDBDatabaseOpenMode.NonexclusiveReadOnly, "");
            ArrayList        tables = db.EnumTables();

            IVistaDBTableStructure tblStructure = db.TableStructure(tableName);

            foreach (IVistaDBColumnAttributes c in tblStructure)
            {
                string colName = c.Name;

                string def = "";
                if (tblStructure.Defaults.Contains(colName))
                {
                    def = tblStructure.Defaults[colName].Expression;
                }
                int width     = c.MaxLength;                 //c.ColumnWidth;
                int dec       = 0;                           //c.ColumnDecimals;
                int length    = 0;
                int octLength = width;

                IVistaDBIdentityInformation identity = null;
                if (tblStructure.Identities.Contains(colName))
                {
                    identity = tblStructure.Identities[colName];
                }

                string[] pks = null;
                if (tblStructure.Indexes.Contains("PrimaryKey"))
                {
                    pks = tblStructure.Indexes["PrimaryKey"].KeyExpression.Split(',');
                }
                else
                {
                    foreach (IVistaDBIndexInformation pk in tblStructure.Indexes)
                    {
                        if (pk.Primary)
                        {
                            pks = pk.KeyExpression.Split(',');
                            break;
                        }
                    }
                }

                System.Collections.Hashtable pkCols = null;
                if (pks != null)
                {
                    pkCols = new Hashtable();
                    foreach (string pkColName in pks)
                    {
                        pkCols[pkColName] = true;
                    }
                }

                switch (c.Type)
                {
                case VistaDBType.Char:
                case VistaDBType.NChar:
                case VistaDBType.NText:
                case VistaDBType.NVarchar:
                case VistaDBType.Text:
                case VistaDBType.Varchar:
                    length = width;
                    width  = 0;
                    dec    = 0;
                    break;

                case VistaDBType.Currency:
                case VistaDBType.Double:
                case VistaDBType.Decimal:
                case VistaDBType.Single:
                    break;

                default:
                    width = 0;
                    dec   = 0;
                    break;
                }

                metaData.Rows.Add(new object[]
                {
                    tblStructure.Name,
                    c.Name,
                    c.RowIndex,
                    c.AllowNull,
                    def == string.Empty ? false : true,
                    def,
                    identity == null ? false : true,
                    1,
                    identity == null ? 0 : Convert.ToInt32(identity.StepExpression),
                    c.Type.ToString(),
                    width,
                    dec,
                    length,
                    octLength,
                    c.Description,
                    pkCols == null ? false : pkCols.Contains(colName)
                });
            }

            return(metaData);
        }