예제 #1
0
        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;
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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;
                }
            }
        }