Добавление данных в базу данных MySql на удаленном сервере из настольного приложения C # - PullRequest
0 голосов
/ 23 марта 2019

У меня есть большой обновленный список строк, который должен быть загружен с обновлением каждой строки с 0 до последнего индекса путем перезаписи существующих записей и добавления новых строк в базу данных MySql на удаленном сервере каждый раз, когда пользователь вызывает функцию.

Добавление строки данных за строкой занимает много времени, даже если процесс не зависает:

 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, и, конечно, не имеет значения, если будет индекс с зазором между удаленными рядами.

1 Ответ

3 голосов
/ 23 марта 2019

Вы заявляете:

Добавление данных в базу данных MySql на удаленном сервере

Это означает, что у вас есть несколько клиентов, которые знают строку подключения к удаленной базе данных. Это охранное устройство! Хватит даже думать об этом! Кроме того, что произойдет, если строка подключения к базе данных изменится? Вам необходимо обновить каждый клиент. Единственное исключение будет, если вы находитесь в доверенной среде с доверенными соединениями, но я подозреваю, что это, так как вы используете MySQL.

К вашей актуальной проблеме:

Ваша основная проблема в том, что для каждого элемента в вашем цикле вы создаете соединение, отправляете что-то на сервер и закрываете ваше соединение. И снова, и снова. Как правило, вы хотите отправить большую команду на сервер вместо нескольких созданных вашим циклом (SQL может обрабатывать несколько операторов вставки в одной команде SQL) .

Чем лучше (безопаснее) :

Создайте приложение для вашего сервера, которое, например, принимает myList в качестве JSON, и сохраните его там. Вероятно, вам нужно обработать авторизацию здесь.

Ваш Клиент отправляет Запрос на сохранение с myList в Приложение, о котором я упоминал выше.

У нас есть несколько технологий для этого:


Предупреждение: Кроме того, на первый взгляд кажется, что у вас проблема с SQL-инъекциями. Посмотрите , что они , и , как вы можете предотвратить это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...