Esempio n. 1
0
        /// <summary>
        /// Returns a list of INSERT statements to insert data for the result sets of one or more queries.
        /// </summary>
        public static IList <string> GetInsertStatements(string serverName, string databaseName, string loginId, string password,
                                                         TextReader queryReader)
        {
            string[] queries = ScriptHelper.ReadDatabaseScript(queryReader);
            if (queries.Length == 0)
            {
                return(new string[0]);
            }

            DbTaskHelper.DefaultServerAndDbNames(ref serverName, ref databaseName);

            IList <string> statements = new List <string>();

            using (SqlConnection connection = new SqlConnection(ScriptHelper.GetSqlConnectionString(
                                                                    serverName, databaseName, loginId, password)))
            {
                connection.Open();

                foreach (string query in queries)
                {
                    statements.Add(GetInsertStatementsForQuery(connection, query));
                }
            }

            return(statements);
        }
Esempio n. 2
0
        /// <summary>
        /// Returns a list of tables in an SQL database in the order in which they can be
        /// deleted (or data in them can be deleted), taking into account foreign keys.
        /// </summary>
        public static IList <string> GetListInDeleteOrder(string serverName, string databaseName)
        {
            DbTaskHelper.DefaultServerAndDbNames(ref serverName, ref databaseName);

            using (SqlConnection connection = new SqlConnection(ScriptHelper.GetSqlConnectionString(
                                                                    serverName, databaseName)))
            {
                connection.Open();

                // Get a list of all user tables.

                IList <string> tables = GetAllTables(connection);

                // For each table get the tables that reference it and move it below all those table.

                List <string> ordered = new List <string>(tables);
                Dictionary <string, IList <string> > dependenceCache = new Dictionary <string, IList <string> >();

                int i = 0;
                while (i < ordered.Count)
                {
                    IList <string> dependentTables = GetDependentTables(connection, ordered[i], dependenceCache);
                    if (!MoveBelowAll(ordered, i, dependentTables))
                    {
                        i++;
                    }
                }

                return(ordered);
            }
        }