Итак, у меня есть это code
который проверяет, добавлены ли новые данные в online database
сравнивая rows
из online and local database
, Если новые данные найдены, они вставляют новые данные в local database
,
public class Reservation
{
public string res_no { get; set; }
public string mem_fname { get; set; }
}
Мой код:
private async void updateDineList()
{
DBconnector.OpenConnection();
//Gets data from online database
HttpClient client = new HttpClient();
var response = await client.GetStringAsync("http://example.com/Reservation/view_pending_reservation");
var persons = JsonConvert.DeserializeObject<List<Reservation>>(response);
//Gets data from Local database
string string_reservation = "SELECT res_no,mem_fname FROM res_no WHERE res_status='pending';";
DataTable reservation_table = new DataTable();
MySqlDataAdapter adapter_reservartion = new MySqlDataAdapter(string_reservation, DBconnector.Connection);
adapter_reservartion.Fill(reservation_table);
//Gets the row of each table
int local = reservation_table.Rows.Count;
int online = persons.Count;
//Compares rows of online and local database
if (local < online)
{
//if the rows of online database is greater than local database
//inserts the new data from local database
string Command_membership = "INSERT INTO reservation_details (res_no,mem_fname) VALUES (@res_no, @mem_fname);";
for (int i = local; i < online; i++)
{
//inserts new data from online to local database
using (MySqlCommand myCmd = new MySqlCommand(Command_membership, DBconnector.Connection))
{
myCmd.CommandType = CommandType.Text;
myCmd.Parameters.AddWithValue("@res_no", persons[i].res_no);
myCmd.Parameters.AddWithValue("@mem_fname", persons[i].mem_fname);
myCmd.ExecuteNonQuery();
}
}
MessageBox.Show("New Records Found");
}
else
{
MessageBox.Show("No new Records");
}
DBconnector.Connection.Close();
}
Так что мой вопрос, есть ли проблема с этим кодом, он работает нормально, но есть ли способ улучшить это. Я знаю, что репликация MySQL лучше, но я использую только бесплатные Web Hosting
с несколькими привилегиями MySQL.
Очевидным улучшением является не создание новой команды для каждой строки. Вы должны либо создать команду и параметры один раз, а затем установить параметры и вызов для каждой строки, или, что еще лучше, упаковать набор обновлений в единую структуру, например, строку xml, и затем передать весь лот в базу данных через сохраненный вызов процедуры.
Другая, вероятно, проблемная проблема заключается в том, что вы проверяете только на основе количества строк. Не знаю, допустимо ли это в вашем сценарии, но это звучит опасно. Что делать, если строки удалены? или это невозможно в вашем сценарии. Возможно, предпочтительнее был бы другой способ проверки последних обновлений.
Без большего контекста это все, что я могу видеть.
Других решений пока нет …