J'utilise mysql avec asp.net sur mon serveur web. J'utilise également une base de données sqlite pour pouvoir utiliser la base de données sur un autre périphérique. Je dois envoyer des données entre les deux bases de données. C'est quelque chose qui doit être fait plusieurs fois par jour. Ceci est un exemple de la façon dont je le fais:erreur mysql: Lock attente timeout dépassé
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();
}
Voici comment je le fais, comme je l'ai écrit dans les commentaires, mais il y a beaucoup plus de paramètres, ils sont tous les mêmes que le premier. Lorsque j'envoie des données entre les bases de données, j'ai comme 20 ensembles différents de ce code qui font presque la même chose que le code ici. Mais comme vous comprenez je ne peux pas les montrer tous ..
Parfois, il peut y avoir 3000-4000 lignes qui doivent être insérées, mais souvent petites comme 1-50. Le problème est que je rencontre cette erreur de temps en temps "Lock attente timeout dépassé, essayez de redémarrer la transaction" et je me demande ce que je peux faire pour l'éviter?
Aussi la solution entière semble lente. Est-ce que je peux faire une sous-sélection pour chaque requête d'insertion?
Merci!