Изменить
if (_con.State == ConnectionState.Open)
_con.Close();
_con.Open();
в
if (_con.State == ConnectionState.Closed)
_con.Open();
и попробуй.
Обычно не рекомендуется проверять, открыто ли соединение при запуске, а затем сразу же закрывать и снова открывать, так как могут возникнуть проблемы с задержкой.
Имеет гораздо больше смысла проверить, есть ли какое-либо соединение, открытое с этим сеансом (connection == Connection.Closed), а затем, если оно закрыто, открыть его, иначе ничего не делать, потому что я уже подключен.
Таким образом, помимо того, чтобы быть более логически значимым, он также более лаконичен.
Кроме того, в вашем коде, когда вы используете SqlConnection, оберните их в
using(_con)
{
//code here, sql stuff
};
, поскольку он будет управлять всеми средствами закрытия и удаления соединения, поэтому вы уверены, что после выполнения вашей логики sql все будет правильно расположено без необходимости вызова методов Close и Dispose вручную.
Дайте мне знать, если это сработало.