Percebo que você abre conexões, mas não as fecha quando termina com elas. Eu prefiro a abordagem de abrir conexões quando elas são necessárias, em vez de possivelmente abri-las se elas ainda não estiverem abertas. Eles podem ser obsoletos.
Armazene em cache a string de conexão mas não a conexão em si.
public static string ConnectionString {get;set;}
public static bool InsertRecord(sql)
{
bool success = false;
using (var con = new Connection(ConnectionString)){
var command = new SqlCommand(sql,con);
success = (command.ExecuteNonQuery() > 0);
}
return success;
}
Os recursos devem ser liberados quando não forem mais necessários.