日志文章

2007年06月15日 14:01:28

调用SqlDataReader方法连接不能够关闭的问题

    今天使用SqlDataReader方法访问数据库时,发现建立的连接在访问完成后不能够关闭,即使手动调用了Close()方法也不能释放此连接,以下是我编写的代码:

SqlConnection sc = new SqlConnection();
        sc.ConnectionString = "Data Source=xx-ckq;Initial Catalog=northwind;user=sa;pwd= 123";
        SqlCommand scm = new SqlCommand();
        for (int i = 0; i < 50; i++)
        {
            sc.Open();
            string sql = "select * from Orders where OrderId='12'";
            scm.Connection = sc;
            scm.CommandText = sql;
            SqlDataReader myDr = scm.ExecuteReader();
            String nstring;
            if (myDr.Read())
            {
                nstring = myDr["RightsStr"].ToString();
                Response.Write("读出的数据为:  " + nstring + "<br>");
            }
            myDr.Close();

}

最后查了一些资料,原来是在调用scm.ExecuteReader()方法时,它有两个重载方法, 一个不带参数,一个带有参数CommandBehavior,如果不使用参数,程序不会主动去关闭,如果使用第二个方法,即给scm.ExecuteReader加上参数CommandBehavior.CloseConnection会在myDr.ExecuteReader执行完后自动关闭与之相关联的sc.

代码如下:

SqlConnection sc = new SqlConnection();
        sc.ConnectionString = "Data Source=xx-ckq;Initial Catalog=northwind;user=sa;pwd= 123";
        SqlCommand scm = new SqlCommand();
        for (int i = 0; i < 50; i++)
        {
            sc.Open();
            string sql = "select * from Orders where OrderId='12'";            scm.Connection = sc;
            scm.CommandText = sql;
            SqlDataReader myDr = scm.ExecuteReader(CommandBehavior.CloseConnection);
            String nstring;
            if (myDr.Read())
            {
                nstring = myDr["RightsStr"].ToString();
                Response.Write("读出的数据为:  " + nstring + "<br>");
            }
            myDr.Close();
}

这样多次打开访问,然后关闭连接,都能够及时的将连接数关闭掉了.
这样也解决了公司主页很长时间以来连接数过多导致不能访问的问题.不错呀.

Tags: SqlDataReader   .net  

类别: 无分类 |  评论(1) |  浏览(3544) |  收藏
发表评论