将数据读取器从方法传递到.cs页面-使用CommandBehavior.关闭连接,但连接未关闭

本文关键字:连接 使用 CommandBehavior 页面 cs 读取 数据 方法 | 更新日期: 2023-09-27 18:03:11

我在类中使用以下方法-我从.cs页面填充数据阅读器调用:

public static SqlDataReader getinfo(string username, string url)
{
    //Initialise connection, string stored in Web.config
    SqlConnection conNs = new SqlConnection(ConfigurationManager.ConnectionStrings["conNs"].ConnectionString);
    SqlCommand cmdNs = new SqlCommand("usp_getinfo", conNs);
    cmdNs.CommandType = CommandType.StoredProcedure;
    cmdNs.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 50));
    cmdNs.Parameters["@username"].Value = username;
    cmdNs.Parameters.Add(new SqlParameter("@url", SqlDbType.VarChar, 50));
    cmdNs.Parameters["@url"].Value = url;
    //Execute Command
    conNs.Open();
    SqlDataReader dr = cmdNs.ExecuteReader(CommandBehavior.CloseConnection);
    //Return data
    return dr;
}

注意commendbehavior.closeconnection。

然后在。cs页面中,我这样称呼它:

SqlDataReader drInfo = dataAccess.getinfo(username, url);
//do some stuff
drInfo.Close();

应该关闭连接了吗?

我有一个问题,applool充满了打开的连接。我的技术有问题吗?

速度是我的首要任务。

谢谢

将数据读取器从方法传递到.cs页面-使用CommandBehavior.关闭连接,但连接未关闭

我认为您需要返回一个数据表而不是SQLDataReader,并且您需要在完成从数据阅读器读取后立即关闭连接。

您确定连接池中的连接没有保持打开状态,还是计数一直在增加?

看起来GetInfo并没有返回很多数据。最好不要像这样传递DataReader。在GetInfo内部,执行Read并返回一个包含信息的对象,而不是返回DataReader。速度上的差异将是无关紧要的,你将消除你所经历的所有痛苦。