接続が閉じられていない。
私の関数では接続が既に終了しているのですが、どうすれば直せますか?
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);
}
6
3
この行でエラーが発生するのだと思われます。
というのは、接続を再利用しており、おそらく前回閉じていないためです。
接続を終了したら、常にすぐに接続を閉じるべきです。それには
using-statement
を使用するのが最適です。例外を再スローするためだけに
Catch
ブロックを使ってはいけないことに注意してください。もし、何もしないのであれば、キャッチする必要はありません。スタックトレースを残すために、throw ex;
の代わりにthrow;
を使うとさらに良いでしょう。 https://stackoverflow.com/a/4761295/284240そのため、try catchブロックを使っているところでは、finallyブロックとその中に
con.close()
を記述するのがよいでしょう。 例えば接続状態を確認してから開いてください。