Alberto Poblacion
It's a little bit complex. My first idea would be to start a thread inside of the "for" loop so that each of the database operations would be processed in parallel. Each has its own database connection, so this wouldn't be a problem. However, there are various things that would have to be taken care of.
First, there is your "proc" object that does an "Update" inside the loop. Depending on what this method does inside, it could be unsafe for multithreading, so it would have to be examined and locking applied if needed.
Then, there is all the logging and tracing logic, which is definitely NOT safe for multithreading. For instance, the stringbuilder "sb" where you Append the error messages would get all messed up if two of the threads tried to append messages at the same time. Same thing goes for the various Trace instructions performed in sequence: if two threads execute this code at the same time, your trace will intermix the various writes and indents, producing a result that is not what you expect.
It can all be fixed for multithreaded work by means of carefully placed lock() statements, but it requires detailed consideration. It would be simple if you just wanted to send Sql Commands in parallel to various databases, but the additional code needs to be analyzed for possible impact when ran from several threads.
Also, you would be updating UI elements from the thread inside the loop, namely the textBox1.BackColor. This is not allowed in Windows Forms: The form controls can only be updated from the same thread that created them, so you have to marshall execution accross threads by means of the Invoke method of the Form or Control. This is not terribly complex if you know how to do it, but it adds yet another consideration that you need to keep in mind.
All things considered, I think that it would be best to try to refactor the code so that the database update operations (which are the ones that are slow and that you wish to perform in parallel) are isolated from all the surrounding logic, and wherever this is not possible, add locking around the operations that are not safe for multithreading.