【发布时间】:2019-01-21 23:01:54
【问题描述】:
所以我有这个code,它通过比较online and local database 的rows 来检查是否将新数据添加到online 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 权限。
【问题讨论】:
-
这取决于您如何使用这两个数据库,它们都添加了什么,以及为什么。复制和同步功能的存在是有原因的,它的构建是可靠的并且具有已知的数量。廉价解决方案的问题在于,您会得到廉价且有时出乎意料的结果。您的代码做了它所做的事情,并且没有明显的疏忽,因为我们不知道系统用法和域,我怀疑我们是否会采用这种问答格式。我建议(如果您不想进行此复制并且设计用于执行此操作的实用程序)试用它并查看
-
无论如何我投票结束这个问题,因为它更像是一个代码审查,有点过于宽泛,并且对于本网站的精神来说质量低下
-
谢谢先生,感谢您的回答。也许生病尝试购买 vps 来执行复制。