Пример #1
0
        public ForeignKey()
        {
            this.Name = "";
//			this._FKTable = null;
//			this._PKTable = null;
            this.ColumnPairs = new ColumnPairCollection();
        }
Пример #2
0
        private static string GenerateRows(ITableSchema schema, TableReader reader)
        {
            var table = reader.Table;

            TableDataClause script = new TableDataClause(schema);

            StringBuilder builder = new StringBuilder();

            foreach (DataRow row in table.Rows)
            {
                var pair = new ColumnPairCollection(row);
                builder.Append(script.INSERT(pair)).AppendLine();
            }

            if (table.Rows.Count > 0)
            {
                builder.AppendLine(SqlScript.GO);
            }

            return(builder.ToString());
        }
Пример #3
0
        private void AddForeignKeys(SqlConnection con)
        {
            SqlCommand cmd = new SqlCommand();

            cmd.Connection  = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "sp_fkeys";
            cmd.Parameters.Add("@fktable_name", SqlDbType.VarChar);
            cmd.Parameters.Add("@fktable_owner", SqlDbType.VarChar);

            foreach (Table objTable in this._Tables)
            {
                cmd.Parameters["@fktable_name"].Value  = objTable.Name;
                cmd.Parameters["@fktable_owner"].Value = "dbo";
                SqlDataReader dr = cmd.ExecuteReader();

                int oFkName       = dr.GetOrdinal("FK_NAME");
                int oPkTableName  = dr.GetOrdinal("PKTABLE_NAME");
                int oFkColumnName = dr.GetOrdinal("FKCOLUMN_NAME");
                int oPkColumnName = dr.GetOrdinal("PKCOLUMN_NAME");
//				int oKeySeq = dr.GetOrdinal("KEY_SEQ");

                if (dr.HasRows)
                {
                    string               ForeignKeyName = "";
                    ForeignKey           objForeignKey;
                    Table                objPKTable     = null;
                    ColumnPairCollection colColumnPairs = null;

                    while (dr.Read())
                    {
                        if (dr.GetString(oFkName) != ForeignKeyName)
                        {
                            if (!string.IsNullOrEmpty(ForeignKeyName))
                            {
                                objForeignKey             = new ForeignKey();
                                objForeignKey.Name        = ForeignKeyName;
                                objForeignKey.FKTable     = objTable;
                                objForeignKey.PKTable     = objPKTable;
                                objForeignKey.ColumnPairs = colColumnPairs;
                                objTable.OutgoingForeignKeys.Add(objForeignKey);
                                objPKTable.IncomingForeignKeys.Add(objForeignKey);
                                // Add foreign key to column outgoing foreign keys collection.
                                foreach (ColumnPair objColumnPair in colColumnPairs)
                                {
                                    objColumnPair.FKColumn.OutgoingForeignKeys.Add(objForeignKey);
                                }
                            }
                            ForeignKeyName = dr.GetString(oFkName);
                            // TODO:1  Fix situation when PKTable cannot be found due to security.
                            objPKTable     = this._Tables[dr.GetString(oPkTableName)];
                            colColumnPairs = new ColumnPairCollection();
                        }
                        ColumnPair objColumnPair2 = new ColumnPair(objTable.Columns[dr.GetString(oFkColumnName)], objPKTable.Columns[dr.GetString(oPkColumnName)]);
                        colColumnPairs.Add(objColumnPair2);
                    }
                    // Add final foreign key.
                    objForeignKey             = new ForeignKey();
                    objForeignKey.Name        = ForeignKeyName;
                    objForeignKey.FKTable     = objTable;
                    objForeignKey.PKTable     = objPKTable;
                    objForeignKey.ColumnPairs = colColumnPairs;
                    objTable.OutgoingForeignKeys.Add(objForeignKey);
                    objPKTable.IncomingForeignKeys.Add(objForeignKey);
                    // Add foreign key to column outgoing foreign keys collection.
                    foreach (ColumnPair objColumnPair in colColumnPairs)
                    {
                        objColumnPair.FKColumn.OutgoingForeignKeys.Add(objForeignKey);
                    }
                }
                dr.Close();
            }
        }