The connection was not closed the connection's current state is open
I assume that the error is raised on this line:
con.Open(); // InvalidOperationException if it's already open
since you're reusing a connection and you probably have not closed it last time.
You should always close a connection immediately as soon as you're finished with it, best by using the using-statement
:
public void run_runcommand(string query)
{
using(var con = new SqlConnection(connectionString))
using(var cmd = new SqlCommand(query, con))
{
con.Open();
// ...
} // close not needed since dispose also closes the connection
}
Note that you should not use a Catch
block just to rethrow an exception. If you don't do anything with it don't catch it at all. It would be even better to use throw;
instead of throw ex;
to keep the stack trace. https://stackoverflow.com/a/4761295/284240
Better you write finally block and within it con.close()
every where where you used try catch blocks.
Eg.
public void run_runcommand(string query)
{
try
{
con.Open();
SqlCommand cmd1 = new SqlCommand(query, con);
cmd1.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
throw ex; //TODO: Please log it or remove the catch
}
finally
{
con.close();
}
}
try
{
string query="my query";
db.run_runcommand(query);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.close();
}
Check the connection state before opening it:
if (con.State != ConnectionState.Open)
con.Open();