Bagaimana cara memperbaiki masalah ini; koneksi sudah ditutup dalam fungsi saya:
SqlConnection con=new SqlConnection(@"Here is My Connection");
public void run_runcommand(string query)
{
try
{
con.Open();
SqlCommand cmd1 = new SqlCommand(query, con);
cmd1.ExecuteNonQuery();
con.Close();
}
catch (Exception ex) { throw ex; }
}
//...
try
{
string query="my query";
db.run_runcommand(query);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
Saya berasumsi bahwa kesalahan dimunculkan pada baris ini:
con.Open(); // InvalidOperationException if it's already open
karena Anda menggunakan kembali koneksi dan Anda mungkin belum menutupnya terakhir kali.
Anda harus selalu menutup koneksi segera setelah anda selesai menggunakannya, paling baik dengan menggunakan 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
}
Perhatikan bahwa anda tidak boleh menggunakan blok Catch
hanya untuk membuang kembali pengecualian. Jika Anda tidak melakukan apa-apa dengan exception tersebut, jangan menangkapnya sama sekali. Akan lebih baik menggunakan throw;
daripada throw ex;
untuk menyimpan stack trace. https://stackoverflow.com/a/4761295/284240
Lebih baik Anda menulis blok finally dan di dalamnya con.close()
setiap tempat di mana Anda menggunakan blok try catch.
Misalnya.
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();
}