我在我的网络服务器上使用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。
问题是我不时遇到这个错误“超过锁定等待超时;尝试重新启动事务”并想知道我可以做些什么来避免它?
整个解决方案似乎也很慢。可能是我需要为每个插入查询做一个子选择吗?
谢谢!
答案 0 :(得分:1)
您可以使用以下语法一次插入多行:
INSERT INTO table (col1, col2) VALUES ('a', 1), ('b', 2), ('c', 3)
这将同时插入三行,并且多更快。