asp.net 中SqlDataReader 关闭 问题
直接上代码
DbsqlHelper.cs中SqlDataReader
C# code
public static SqlDataReader ExecuteReader(string strSQL)
{
SqlConnection connection = new SqlConnection(DBconnstring);
SqlCommand cmd = new SqlCommand(strSQL, connection);
try
{
connection.Open();
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return myReader;
}
catch (System.Data.SqlClient.SqlException E)
{
throw;
}
}
数据访问层 调用ExecuteReader 方法
C# code
public string Get_WebMessage()
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select top 1 gonggao from webinfo;");
string str_Ggao = null;
using (SqlDataReader Reader = DbsqlHelper.ExecuteReader(strSql.ToString()))
{
if (Reader.Read())
{
str_Ggao = Reader["gonggao"].ToString();
}
Reader.Close();
Reader.Dispose();
return str_Ggao;
}
}
DbsqlHelper.cs 中的SqlConnection 是否会自动关闭。
在sql服务器上 活动监视器中 一直会有 这个链接。
求解。
------解决方案--------------------额 貌似花括号结束不是自动回收么。
------解决方案-------------------- 把数据访问的数据都写在 using(){数据访问代码!}
这个会自动关闭连接
不知道是不是你说的意思?
------解决方案--------------------那就再写一个关闭数据库的方法
private static void close_connection()
{
SqlConnection connection = new SqlConnection(DBconnstring);
if(connection.State==ConnectionState.Open)
connection.Close();
}
------解决方案--------------------CommandBehavior.CloseConnection,数据库连接将在XXXDataReader对象关闭时自动关闭.
------解决方案--------------------SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
你也有这句。。。应该会在reader关闭时关闭这个connection的。。。
------解决方案-------------------- public static SqlDataReader ExecuteReader(string strSQL)
{
using (SqlConnection connection = new SqlConnection(DBconnstring))
{
if(connection.State==ConnectionState.Closed){
connection.open();
}
SqlCommand cmd = new SqlCommand(strSQL, connection);
try
{
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return myReader;
}
catch (System.Data.SqlClient.SqlException E)
{
throw;
}
}
}
------解决方案--------------------导致连接不能关闭的原因很多,这个CommandBehavior.CloseConnection在正常结束情况下是可以关闭连接的,但如果在没有结束前出现错误,一样也是关闭不了的。