Эффективный способ циклического перебора данных
В c# я написал код для первого извлечения данных из базы данных, циклического перебора их и создания инструкции insert для них же. Ниже приведен код C#...
StringBuilder strSql = new StringBuilder(); strSql.Append("ATTACH 'D:\\Application\\Demo Applications\\Windows\\WindowsFormsApplication_SQLite\\Database\\Source\\TestDB.db' AS SourceDB;"); strSql.Append("ATTACH 'D:\\Application\\Demo Applications\\Windows\\WindowsFormsApplication_SQLite\\Database\\Destination\\TestDB.db' AS DestDB;"); using (SQLiteConnection con = new SQLiteConnection(SourceconnectionString)) { con.Open(); using (SQLiteCommand cmd = new SQLiteCommand("SELECT * FROM dbSchema", con)) { using (SQLiteDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) // Reading Rows { strSql.Append("INSERT INTO DestDB."); strSql.Append(rdr["TableName"].ToString()); strSql.Append(" ("); strSql.Append(rdr["Columns"].ToString()); strSql.Append(") "); strSql.Append("SELECT "); strSql.Append(rdr["Columns"].ToString()); strSql.Append(" FROM SourceDB."); strSql.Append(rdr["TableName"].ToString()); strSql.Append(";"); var tableName = rdr["TableName"].ToString(); var Columns = rdr["Columns"].ToString(); } } } } using (SQLiteConnection conn = new SQLiteConnection(DestinationConnectionString)) { conn.Open(); using (SQLiteCommand cmd = new SQLiteCommand(conn)) { cmd.CommandText = strSql.ToString(); int i = cmd.ExecuteNonQuery(); if (i > 0) { MessageBox.Show("Data dumped successfully ...!!!"); } } }
Приведенный выше код просто отлично работает. Он делает именно то, что нужно.
Но мне интересно, есть ли более элегантный и эффективный способ добиться того же.
Что я уже пробовал:
StringBuilder strSql = new StringBuilder(); strSql.Append("ATTACH 'D:\\Application\\Demo Applications\\Windows\\WindowsFormsApplication_SQLite\\Database\\Source\\TestDB.db' AS SourceDB;"); strSql.Append("ATTACH 'D:\\Application\\Demo Applications\\Windows\\WindowsFormsApplication_SQLite\\Database\\Destination\\TestDB.db' AS DestDB;"); using (SQLiteConnection con = new SQLiteConnection(SourceconnectionString)) { con.Open(); using (SQLiteCommand cmd = new SQLiteCommand("SELECT * FROM dbSchema", con)) { using (SQLiteDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) // Reading Rows { strSql.Append("INSERT INTO DestDB."); strSql.Append(rdr["TableName"].ToString()); strSql.Append(" ("); strSql.Append(rdr["Columns"].ToString()); strSql.Append(") "); strSql.Append("SELECT "); strSql.Append(rdr["Columns"].ToString()); strSql.Append(" FROM SourceDB."); strSql.Append(rdr["TableName"].ToString()); strSql.Append(";"); var tableName = rdr["TableName"].ToString(); var Columns = rdr["Columns"].ToString(); } } } } using (SQLiteConnection conn = new SQLiteConnection(DestinationConnectionString)) { conn.Open(); using (SQLiteCommand cmd = new SQLiteCommand(conn)) { cmd.CommandText = strSql.ToString(); int i = cmd.ExecuteNonQuery(); if (i > 0) { MessageBox.Show("Data dumped successfully ...!!!"); } } }