Я использую mysql вместе с asp.net на моем веб-сервере. Я также использую базу данных sqlite, чтобы иметь возможность использовать базу данных на другом устройстве. Мне нужно отправить данные между двумя базами данных. Это то, что нужно делать много раз в день. Вот пример того, как я это делаю:
using (MySqlTransaction mysqltransaction = mysqlconn.BeginTransaction())
{
using (mysqlcmd)
{
//Creates parameters
MySqlParameter parmitemid = new MySqlParameter("?itemid", MySqlDbType.Int32);
mysqlcmd.Parameters.Add(parmitemid);
//Creates more parameters, can't show them all...
//For each row in the sqlite table, do the insert
while (reader.Read())
{
//Sets the parameters, can't show them all
parmitemid.Value = reader.GetInt(1);
mysqlcmd.CommandText = "INSERT INTO tblitem (itemid,......,customerid) VALUES (?itemid,......,(SELECT customerid FROM tblcustomer WHERE fid=?fid ORDER BY customerid DESC LIMIT 1))";
mysqlcmd.ExecuteNonQuery();
}
}
mysqltransaction.Commit();
}
Вот как я это делаю, как я писал в комментариях, есть еще много параметров, но они все такие же, как и первый. При отправке данных между базами данных у меня есть 20 различных наборов этого кода, которые делают почти то же самое, что и код здесь. Но, как вы понимаете, я не могу показать их все ..
Иногда может быть 3000-4000 строк, которые нужно вставить, но часто маленькие, как 1-50.
Проблема в том, что я время от времени сталкиваюсь с этой ошибкой "Превышено время ожидания блокировки; попробуйте перезапустить транзакцию" и задаюсь вопросом, что я могу сделать, чтобы ее избежать?
Также все решение кажется медленным. Может ли быть так, что мне нужно сделать отбор для каждого запроса вставки?
Спасибо!