Пример #1
0
        private void _LoadAll(string query1, string query2)
        {
            NpgsqlConnection cn = null;

            try
            {
                cn = ConnectionHelper.CreateConnection(this.dbRoot, this.Table.Database.Name);

                DataTable metaData1 = new DataTable();
                DataTable metaData2 = new DataTable();

                NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(query1, cn);
                adapter.Fill(metaData1);

                adapter = new NpgsqlDataAdapter(query2, cn);
                adapter.Fill(metaData2);

                DataRowCollection rows = metaData2.Rows;
                int count = rows.Count;
                for (int i = 0; i < count; i++)
                {
                    metaData1.ImportRow(rows[i]);
                }

                PopulateArrayNoHookup(metaData1);

                if (metaData1.Rows.Count > 0)
                {
                    string   catalog = this.Table.Database.Name;
                    string   schema;
                    string   table;
                    string[] cols = null;
                    string   q;

                    string query =
                        "SELECT a.attname as COLUMN from pg_attribute a, pg_class c, pg_namespace n " +
                        "WHERE a.attrelid = c.oid AND c.relnamespace = n.oid " +
                        "AND a.attnum > 0 AND NOT a.attisdropped AND c.relkind = 'r' ";

                    foreach (ForeignKey key in this)
                    {
                        //------------------------------------------------
                        // Primary
                        //------------------------------------------------
                        cols = ParseColumns(key._row["PK_COLS"] as string);

                        schema = key._row["PK_TABLE_SCHEMA"] as string;
                        table  = key._row["PK_TABLE_NAME"] as string;

                        q  = query;
                        q += "AND n.nspname = '" + schema + "' AND c.relname = '" + table + "' AND attnum IN(";

                        for (int i = 0; i < cols.GetLength(0); i++)
                        {
                            if (i > 0)
                            {
                                q += ',';
                            }
                            q += cols[i].ToString();
                        }

                        q += ") ORDER BY attnum;";

                        DataTable metaData = new DataTable();
                        adapter = new NpgsqlDataAdapter(q, cn);

                        adapter.Fill(metaData);

                        for (int i = 0; i < cols.GetLength(0); i++)
                        {
                            key.AddForeignColumn(catalog, "", table, metaData.Rows[i]["COLUMN"] as string, true);
                        }

                        //------------------------------------------------
                        // Foreign
                        //------------------------------------------------
                        cols = ParseColumns(key._row["FK_COLS"] as string);

                        schema = key._row["FK_TABLE_SCHEMA"] as string;
                        table  = key._row["FK_TABLE_NAME"] as string;

                        q  = query;
                        q += "AND n.nspname = '" + schema + "' AND c.relname = '" + table + "' AND attnum IN(";

                        for (int i = 0; i < cols.GetLength(0); i++)
                        {
                            if (i > 0)
                            {
                                q += ',';
                            }
                            q += cols[i].ToString();
                        }

                        q += ") ORDER BY attnum;";

                        metaData = new DataTable();
                        adapter  = new NpgsqlDataAdapter(q, cn);

                        adapter.Fill(metaData);

                        for (int i = 0; i < cols.GetLength(0); i++)
                        {
                            key.AddForeignColumn(catalog, "", table, metaData.Rows[i]["COLUMN"] as string, false);
                        }
                    }
                }
            }
            catch {}

            cn.Close();
        }