c # — синхронизация базы данных — локальная и онлайн без репликации

Итак, у меня есть это 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.

0

Решение

Очевидным улучшением является не создание новой команды для каждой строки. Вы должны либо создать команду и параметры один раз, а затем установить параметры и вызов для каждой строки, или, что еще лучше, упаковать набор обновлений в единую структуру, например, строку xml, и затем передать весь лот в базу данных через сохраненный вызов процедуры.

Другая, вероятно, проблемная проблема заключается в том, что вы проверяете только на основе количества строк. Не знаю, допустимо ли это в вашем сценарии, но это звучит опасно. Что делать, если строки удалены? или это невозможно в вашем сценарии. Возможно, предпочтительнее был бы другой способ проверки последних обновлений.

Без большего контекста это все, что я могу видеть.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]