我在ASP项目中遇到以下错误:
The connection was not closed. The connection's current state is open
在SqlConnection对象上调用.open()函数时。
我试过这个:
if (Conn.State != ConnectionState.Closed)
{
Log.Message(xxx);
try
{
Conn.Close();
}
catch (Exception ex)
{
Log.Error(xxxx);
}
}
Conn.Open();
但这仍然会引发错误。 Conn对象声明为:
private static readonly SqlConnection Conn = new SqlConnection(xxxx);
知道我应该在哪里寻找解决方案
答案 0 :(得分:7)
这是模式。
using(var conn = new SqlConnection(connectionString))
using(var cmd = new SqlCommand(someSql, conn)
{
conn.Open();
cmd.ExecuteNonQueryOrWhatevs();
}
不要试图重复使用它。只需获取它,使用它,并尽快处理它。
此外,这些都不是线程安全的,因此不要从不同的线程触及上述任何实例。请使用一个线程来连接。随意使用多个线程来处理结果。
答案 1 :(得分:1)
要确保始终关闭连接,请打开using块内部的连接,如以下代码片段所示。这样做可确保在代码退出块时自动关闭连接。
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// Do work here; connection closed on following line.
}
答案 2 :(得分:0)
关闭连接和处置对象的最佳方法是“最后”你应该去做。 或者更好地使用用于处理所有对象和关闭连接,请参阅下面的代码段
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
}