我有一个很大的更新字符串列表,每次用户调用函数时,必须通过重写现有记录并将新行添加到远程服务器上的 MySql 数据库来更新从 0 到最后一个索引的每一行。
逐个字符串添加数据即使不被进程挂起也需要大量时间:
foreach (string str in myList)
{
string Query = "insert into tab(a) values(@a);";
MySqlConnection conn = new MySqlConnection(connString);
MySqlCommand conn_ = new MySqlCommand(Query, conn);
conn.Open();
conn_.ExecuteNonQuery();
conn.Close();
}
我的目标是弄清楚什么是最合适的快速完成方法。也许我应该在本地创建和更新表,然后以某种方式将其上传到数据库。
我有一个 List<string> myList = new List<string>();
其中包含大约 5000 行,我在远程服务器上的数据库中有表:
id | user | nickname
_____________________
0 | record | record
1 | ... | ...
我想要的结果是将所有记录从 0 更新到最高索引,并添加新记录并删除额外记录,以防当前上传包含的记录少于以前每次从 0 索引开始的记录,当然,索引是否会到来没有关系删除的行之间有间隙。
最佳答案
您声称:
Adding of data to MySql database on remote server
这意味着,您有多个知道远程数据库连接字符串的客户端。这是一个安全灾难! 别想了!另外,如果数据库的连接字符串发生变化会怎样?您需要更新每个客户端。唯一的异常(exception)是,如果您处于具有可信连接的可信环境中,但我怀疑这一点,因为您使用的是 MySQL
。
针对您的实际问题:
您的主要问题是,对于您循环中的每个项目,您都会创建一个连接,向服务器发送一些内容并关闭您的连接。一次又一次。基本上,您想向服务器发送大命令,而不是循环创建的多个命令 (SQL 可以在一个 SQL 命令中处理 multiple insert statements)。
更好(更安全的方式):
为您的服务器创建一个应用程序,例如接受 myList
作为 JSON 并将其保存在那里。可能你需要在这里处理授权。
您的客户向应用程序发送一个带有 myList
的保存请求,我在上面已经提到过。
我们有一些技术:
警告:另外,乍一看,您似乎遇到了 SQL 注入(inject)问题。参见 what they are , 和 how you can prevent it .
关于c# - 从 C# 桌面应用程序向远程服务器上的 MySql 数据库添加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55309817/