Поскольку серверу требуется подключение для каждой базы данных, ответы, которые я нашел в SO, не работают вообще. Для некоторых таблиц мне нужно сделать некоторые вычисления перед копированием строк, но некоторые я могу скопировать всю таблицу. И, наконец, это автоматизация в моей программе, которую я написал.Копирование таблиц из одной базы данных в другую на том же сервере
Oldcn - это подключение к старой базе данных Newcn для новой базы данных.
Для таблиц, которые я могу скопировать целиком, я написал эту процедуру ниже.
Есть ли лучший короткий способ выполнить эту работу? (Работает на фоне)
private string[] CopyTva(MySqlConnection Oldcn, MySqlConnection Newcn, string[] res, DoWorkEventArgs we,string msg)
{
int counter = int.Parse(res[1]);
MySqlCommand cmd = new MySqlCommand("SELECT * FROM tvaval", Oldcn);
MySqlCommand cmd1 = new MySqlCommand("INSERT INTO tvaval (id,tvavalue,cr_user,cr_date,up_user,up_date) VALUES (@id,@tvavalue,@cr_user,@cr_date,@up_user,@up_date)", Newcn);
MySqlDataReader rd = null;
try
{
rd = cmd.ExecuteReader();
while (rd.Read())
{
cmd1.Parameters.AddWithValue("@id", rd["id"].ToString());
//bla bla same as above
try
{
cmd1.ExecuteNonQuery();
}
catch (MySqlException e)
{
rd.Dispose();
res[2] = "Erreur:TVA " + e.Message.ToString();
return res;
}
++counter;
bgw.ReportProgress((counter * 100)/DbTotalRow,msg);
cmd1.Parameters.Clear();
}
rd.Dispose();
}
catch (MySqlException e)
{
res[2] = "Erreur:TVA " + e.Message.ToString();
return res;
}
res[0] = "1";res[1] = counter.ToString();res[2] = "";
return res;
}
когда вы выбрасывайте 2 оставшихся 'объектов MySqlCommand' .. попробуйте упаковку те вокруг' используя() {} ' – MethodMan
У меня есть одно чтение и утилизация в цикле while и while. Поскольку соединения открыты во время всей передачи, я не использовал здесь инструкцию. Но я знаю, что это хорошее решение. Спасибо –
Вы знаете, что автоматическое удаление не происходит на объектах sql. – MethodMan