internal override void LoadAll() { try { var cn = new FbConnection(_dbRoot.ConnectionString); cn.Open(); DataTable metaData1 = cn.GetSchema("ForeignKeys", new[] { null, null, Table.Name }); DataTable metaData2 = cn.GetSchema("ForeignKeys", new[] { null, null, null, null, null, Table.Name }); cn.Close(); DataRowCollection rows = metaData2.Rows; int count = rows.Count; for (int i = 0; i < count; i++) { metaData1.ImportRow(rows[i]); } PopulateArrayNoHookup(metaData1); ForeignKey key = null; string keyName = ""; foreach (DataRow row in metaData1.Rows) { keyName = row["FK_NAME"] as string; key = GetByName(keyName); key.AddForeignColumn(null, null, (string)row["PK_TABLE_NAME"], (string)row["PK_COLUMN_NAME"], true); key.AddForeignColumn(null, null, (string)row["FK_TABLE_NAME"], (string)row["FK_COLUMN_NAME"], false); } } catch (Exception ex) { string m = ex.Message; } }
override internal void LoadAll() { try { using (FbConnection cn = new FirebirdSql.Data.FirebirdClient.FbConnection(this._dbRoot.ConnectionString)) { cn.Open(); if (allFkData == null) { allFkData = cn.GetSchema("ForeignKeys"); allFkData.Columns.Add("COLUMN_NAME"); allFkData.Columns.Add("REFERENCED_COLUMN_NAME"); allFkData.Columns.Add("ORDINAL_POSITION"); allFkData.Columns.Add("DEFERRABILITY"); mappingHash = new NameValueCollection(); mappingHash["FK_TABLE_CATALOG"] = "TABLE_CATALOG"; mappingHash["FK_TABLE_SCHEMA"] = "TABLE_SCHEMA"; mappingHash["FK_TABLE_NAME"] = "TABLE_NAME"; mappingHash["PK_TABLE_CATALOG"] = "REFERENCED_TABLE_CATALOG"; mappingHash["PK_TABLE_SCHEMA"] = "REFERENCED_TABLE_SCHEMA"; mappingHash["PK_TABLE_NAME"] = "REFERENCED_TABLE_NAME"; mappingHash["ORDINAL"] = "ORDINAL_POSITION"; mappingHash["UPDATE_RULE"] = "UPDATE_RULE"; mappingHash["DELETE_RULE"] = "DELETE_RULE"; mappingHash["PK_NAME"] = "INDEX_NAME"; mappingHash["FK_NAME"] = "CONSTRAINT_NAME"; mappingHash["DEFERRABILITY"] = "DEFERRABILITY"; } DataTable metaData = allFkData.Clone(); metaData.Clear(); foreach (DataRow row in allFkData.Rows) { if ((this.Table.Name == (string)row["TABLE_NAME"]) || (this.Table.Name == (string)row["REFERENCED_TABLE_NAME"])) { string indexName = (string)row["INDEX_NAME"]; string refTableName = (string)row["REFERENCED_TABLE_NAME"]; string isDef = (string)row["IS_DEFERRABLE"]; string initDef = (string)row["INITIALLY_DEFERRED"]; row["DEFERRABILITY"] = (isDef == "NO" ? 3 : (initDef == "YES" ? 2 : 1)); DataTable metaDataColumns = cn.GetSchema("IndexColumns", new string[] { null, null, null, indexName }); metaDataColumns.DefaultView.Sort = "ORDINAL_POSITION ASC"; DataTable metaDataPKIndex = cn.GetSchema("Indexes", new string[] { null, null, refTableName }); metaDataPKIndex.DefaultView.RowFilter = "IS_PRIMARY = True"; string refPkIndexName = (string)metaDataPKIndex.DefaultView[0]["INDEX_NAME"]; DataTable metaDataColumnsRefPk = cn.GetSchema("IndexColumns", new string[] { null, null, null, refPkIndexName }); metaDataColumnsRefPk.DefaultView.Sort = "ORDINAL_POSITION ASC"; if (metaDataColumnsRefPk.Rows.Count == metaDataColumns.Rows.Count) { for (int i = 0; i < metaDataColumnsRefPk.Rows.Count; i++) { DataRow newrow = metaData.Rows.Add(row.ItemArray); newrow["ORDINAL_POSITION"] = metaDataColumnsRefPk.DefaultView[i]["ORDINAL_POSITION"]; newrow["COLUMN_NAME"] = metaDataColumns.DefaultView[i]["COLUMN_NAME"]; newrow["REFERENCED_COLUMN_NAME"] = metaDataColumnsRefPk.DefaultView[i]["COLUMN_NAME"]; } } } } cn.Close(); PopulateArrayNoHookup(metaData, mappingHash); ForeignKey key = null; string keyName = ""; foreach (DataRow row in metaData.Rows) { keyName = row["CONSTRAINT_NAME"] as string; key = this.GetByName(keyName); key.AddForeignColumn(null, null, (string)row["TABLE_NAME"], (string)row["COLUMN_NAME"], false); key.AddForeignColumn(null, null, (string)row["REFERENCED_TABLE_NAME"], (string)row["REFERENCED_COLUMN_NAME"], true); } } } catch (Exception ex) { string m = ex.Message; } }
internal void PopulateArray(DataTable dataTableFk, DataTable dataTablePk) { DataTable metaData = new DataTable(); metaData.Columns.AddRange( new DataColumn[] { new DataColumn("PK_TABLE_CATALOG"), new DataColumn("PK_TABLE_SCHEMA"), new DataColumn("PK_TABLE_NAME"), new DataColumn("FK_TABLE_CATALOG"), new DataColumn("FK_TABLE_SCHEMA"), new DataColumn("FK_TABLE_NAME"), new DataColumn("ORDINAL"), new DataColumn("PK_NAME"), new DataColumn("FK_NAME"), new DataColumn("UPDATE_RULE"), new DataColumn("DELETE_RULE"), new DataColumn("DEFERRABILITY") } ); this.BindToColumns(metaData); ForeignKey key = null; int j = 0; for (int i = 0; i < dataTableFk.Rows.Count; i++) { DataRow rowPk = dataTablePk.Rows[i]; DataRow rowFk = dataTableFk.Rows[i]; try { string pkschema = rowPk["TABLE_SCHEMA"].ToString(); string pktable = rowPk["TABLE_NAME"].ToString(); string pkcolumn = rowPk["COLUMN_NAME"].ToString(); string fkschema = rowPk["TABLE_SCHEMA"].ToString(); string fktable = rowFk["TABLE_NAME"].ToString(); string fkcolumn = rowFk["COLUMN_NAME"].ToString(); string fkKeyName = rowFk["CONSTRAINT_NAME"].ToString(); string pkKeyName = rowFk["PK_CONSTRAINT_NAME"].ToString(); //DataRow row = rowView.Row; key = this.GetByName(fkKeyName); if (null == key) { DataRow row = metaData.NewRow(); row["PK_TABLE_CATALOG"] = pkschema; row["PK_TABLE_SCHEMA"] = pkschema; row["PK_TABLE_NAME"] = pktable; row["FK_TABLE_CATALOG"] = fkschema; row["FK_TABLE_SCHEMA"] = fkschema; row["FK_TABLE_NAME"] = fktable; row["ORDINAL"] = j++.ToString(); row["PK_NAME"] = pkKeyName; row["FK_NAME"] = fkKeyName; row["UPDATE_RULE"] = ""; row["DELETE_RULE"] = ""; row["DEFERRABILITY"] = 0; metaData.Rows.Add(row); key = (ForeignKey)this.dbRoot.ClassFactory.CreateForeignKey(); key.dbRoot = this.dbRoot; key.ForeignKeys = this; key.Row = row; this._array.Add(key); } key.AddForeignColumn(pkschema, pkschema, pktable, pkcolumn, true); key.AddForeignColumn(fkschema, fkschema, fktable, fkcolumn, false); } catch (Exception ex) { string tmp = ex.Message; } } }