当前位置:编程学习 > C#/ASP.NET >>

SqlDataReader的数据连接的关闭问题.

数据访问方法是
public static SqlDataReader GetData(string strOrder)
{
SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["Connection"]);
SqlCommand cmd = new SqlCommand(strOrder, con);
con.Open();
SqlDataReader sdrData = cmd.ExecuteReader();
return sdrData;
con.Close();
cmd.Connection.Close();
con.Dispose();
cmd.Dispose();
sdrData.Close();
}


执行了下面的绑定后需要手动关闭连接么?怎么Sql上面还有一条这次数据访问的连接数呢?
ddlDep.DataSource = DataAccess.GetInfo("select id,name from qsjn_department ");
ddlDep.DataTextField = "name";
ddlDep.DataValueField = "id";
ddlDep.DataBind(); --------------------编程问答-------------------- 连接池绑定后在关闭 --------------------编程问答-------------------- GetData函数本身的结构就有问题,执行到"return   sdrData"时已经跳出该函数了,下面的语句当然不会执行到,所以你的SQL数据库连接还在. --------------------编程问答-------------------- public   static   SqlDataReader   GetData(string   strOrder) 

SqlConnection   con   =   new   SqlConnection(ConfigurationSettings.AppSettings["Connection"]); 
SqlCommand   cmd   =   new   SqlCommand(strOrder,   con); 
con.Open(); 
SqlDataReader   sdrData   =   cmd.ExecuteReader(); 
return   sdrData; 


这段代码本身就有问题 返回
return   sdrData; 
之后
这些都是无效代码
con.Close(); 
cmd.Connection.Close(); 
con.Dispose(); 
cmd.Dispose(); 
sdrData.Close(); 
--------------------编程问答-------------------- public SqlDataReader GetDataReader(string str_Sql)
    {
        DataBase db = new DataBase();
        try
        {
            db.Open();
            SqlCommand cmd = new SqlCommand(str_Sql, db.con);
            SqlDataReader dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            return dataReader;
        }
        catch
        {
            db.con.Close();
            return null;
        }
    }




DataBase 是我自己定义的类 --------------------编程问答-------------------- ASP.NEt的数据库连接其实不用销毁的 当你使用完数据库的操作后 它的后台就会帮你销毁啊 --------------------编程问答-------------------- 一般还是手动销毁比较好一点 --------------------编程问答-------------------- 连接还在的,SqlDataReader是不会自动删除连接的,而你的GetData因为return语句,后面的语句不能执行,所以连接还在,其实用dataset比你的好多了


public DataSet GetData(String _tabname,String _sql)
{
SqlConnection   con   =   new   SqlConnection(ConfigurationSettings.AppSettings["Connection"]); 
.
.
.
.
.
//呵呵平时都是代码自动完成,这里不太记得了,反正就是返回一个dataset(),然后调用的时候会自动关闭的
}
--------------------编程问答--------------------

public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {
        SqlCommand cmd = new SqlCommand();
        SqlConnection conn = new SqlConnection(connectionString);

        // 在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在,
        //CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获。
        //关闭数据库连接,并通过throw再次引发捕捉到的异常。
        try
        {
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            cmd.Parameters.Clear();
            return rdr;
        }
        catch
        {
            conn.Close();
            throw;
        }
    }
--------------------编程问答-------------------- SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

正解
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,