Каждый объект команды, который вы используете в своем приложении, должен иметь свой собственный объект подключения, который вы открываете непосредственно перед выполнением команды и закрываете сразу после этого. (Предпочтительно, завернутый в оператор using
)
Доверяйте технологии пула соединений, чтобы иметь дело с фактическими базовыми соединениями. Это не позволит нескольким потокам одновременно выполнять несколько команд на одном и том же соединении (о чем говорит ошибка, которую вы видите).
Единственное, что должно быть разделено между потоками - это соединение string .