That is a lot of code.
I'm not really good at VB but i will give it a shot.
You have a lot of for each loops, that is what's slowing you down, but the first thing you should look at is the time out value if i'm not mistaken it is set to 1 minute, that might be a bit short expecially if you are going with huge amounts of data across the internet.
Next you have that counter "i" but you only use it to count the number of records, not split the operation. My VB really isn't that good so i will try to give you some pseudo code:
Find all the rows which need to be updated.
Perform the update locally.
Create a set of updated rows 500 or so at a time and send this to the database, repeat with the next 500 or so.
But this still doesnt look good to me, i would look for a way to either generate a query which will handle this work or a stored procedure perhaps.
Maybe a webservice which accepts a collection of objects, all of which need to be updated with only the values which need to be changed i.e. object with 9 fields for example, only 2 need to be changed, then leave the other 7 empty.
Then on the server pass each of the objects to a stored procedure which will handle it, with some simple logic telling it to leave all the empty fields unchanged. Your code seems a bit resource intense for a client machine
I hope this was of some help to you, maybe someone wiser will give us a better solution