0

所以我有这个可以通过比较来code检查是否添加了新数据。如果找到新数据,它会将新数据插入到.online databaserowsonline and local databaselocal 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 权限。

4

1 回答 1

1

明显的改进不是为每一行创建一个新命令。您应该创建一次命令和参数,然后设置参数并为每一行调用,或者更好地将更新集打包到一个结构中,例如和 xml 字符串,然后通过存储的过程调用。

其他可能有问题的问题是您纯粹基于行数进行检查。不知道这在您的场景中是否有效,但听起来很危险。如果行被删除怎么办?或者这在你的场景中是不可能的。检查最后更新的其他方式可能会更可取。

没有更多的上下文,这就是我所能看到的。

于 2018-08-15T04:13:53.307 回答