How can I use backgroundworker in while loop where I use SqlDataReader ? I have a code where I compare the records in the remote database with the local database. If there is no match it is adding to the list of new records. If there is a match but the date_modified fields are not the same then it is adding to the list of update. My code is working fine but the since there are way too many records in the table sometimes my program hangs and I can not give any information to the user in UI. To do that I need to use backgroundworker. So how do I do that ?
My code is like this;
remote_query = "SELECT ID, DATE_MODIFIED FROM REMOTE_TABLE";
remote_connect();
remote_command = new SqlCommand(remote_query, remote_coonnection);
SqlDataReader remote_reader = remote_command.ExecuteReader();
while (remote_reader.Read())
{
local_query = "SELECT ID, DATE_MODIFIED FROM LOCAL_TABLE WHERE ID=" + remote_reader[remote_reader.GetOrdinal("ID")].ToString();
local_connect();
local_command = new SqlCommand(local_query, poscon);
SqlDataReader local_reader = local_command.ExecuteReader();
if (local_reader.HasRows)
{
while (local_reader.Read())
{
if (remote_reader[remote_reader.GetOrdinal("DATE_MODIFIED")].ToString() != local_reader[local_reader.GetOrdinal("DATE_MODIFIED")].ToString())
{
string[] line = { remote_reader[remote_reader.GetOrdinal("ID")].ToString(), remote_reader[remote_reader.GetOrdinal("DEFINITION_")].ToString() };
var item = new ListViewItem(line);
list_of_to_be_updated.Items.Add(item);
}
}
}
else
{
string[] line = { remote_reader[remote_reader.GetOrdinal("ID")].ToString(), remote_reader[remote_reader.GetOrdinal("DEFINITION_")].ToString() };
var item = new ListViewItem(line);
list_of_to_be_inserted.Items.Add(item);
}
}