日期:2014-05-18  浏览次数:20443 次

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在正常结束情况下是可以关闭连接的,但如果在没有结束前出现错误,一样也是关闭不了的。