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(),然后调用的时候会自动关闭的
}
--------------------编程问答-------------------- SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
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;
}
}
正解
补充:.NET技术 , ASP.NET