类OA.Config 中有如下方法:
/// <summary>
/// 返回一个SqlDataReader对象.但是使用完后还需关闭此对象和连接
/// </summary>
/// <param name="Sql">查询语句</param>
public SqlDataReader ExecuteReader_return_dr(string Sql)
{
this.Con.Open();
SqlCommand com = new SqlCommand(Sql,Con);
SqlDataReader SqlDataReader_dr =com.ExecuteReader();
return SqlDataReader_dr;
}
当我调用这个方法后会把一个SqlDataReader 结果返回如下:
protected OA.Config Conn=new OA.Config();
SqlDataReader dr = Conn.ExecuteReader_return_dr(sql);
使用完dr后再进行关闭SqlDataReader 及数据库连接。
dr.Close();
Conn.Close();
所以我想请问方法ExecuteReader_return_dr中的SqlDataReader_dr是否自己自动关闭。。
要不我感觉整个程序存在了两个SqlDataReader
/// <summary>
/// 返回一个SqlDataReader对象.但是使用完后还需关闭此对象和连接
/// </summary>
/// <param name="Sql">查询语句</param>
public SqlDataReader ExecuteReader_return_dr(string Sql)
{
this.Con.Open();
SqlCommand com = new SqlCommand(Sql,Con);
SqlDataReader SqlDataReader_dr =com.ExecuteReader();
return SqlDataReader_dr;
}
当我调用这个方法后会把一个SqlDataReader 结果返回如下:
protected OA.Config Conn=new OA.Config();
SqlDataReader dr = Conn.ExecuteReader_return_dr(sql);
使用完dr后再进行关闭SqlDataReader 及数据库连接。
dr.Close();
Conn.Close();
所以我想请问方法ExecuteReader_return_dr中的SqlDataReader_dr是否自己自动关闭。。
要不我感觉整个程序存在了两个SqlDataReader
和
SqlDataReader SqlDataReader_dr
就是一个东西这是因为SqlDataReader是引用对象,所有的赋值操作都是传递引用,不产生拷贝。
所以SqlDataReader dr = Conn.ExecuteReader_return_dr(sql);其实就是把SqlDataReader_dr传给dr。实际上,dr就是SqlDataReader_dr,两者并没有什么区别。
老是让SQL出现连接池已满
无错。不过其实,Conn.Close();也会关闭DataReader,因为在SqlConnection.Close方法里关闭了DataReader。
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(GetConnectString());
try
{
PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, null);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return rdr;
}
catch(Exception e)
{
conn.Close();
Sys.ShowErrorInfo(e.Message.ToString());
throw;
}
}
其中调用CommandBehavior.CloseConnection参数后,只需要将DataReader.close关闭,其sqlconnection会随之关闭的