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