将数据读取器从方法传递到.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充满了打开的连接。我的技术有问题吗?
速度是我的首要任务。
谢谢
我认为您需要返回一个数据表而不是SQLDataReader,并且您需要在完成从数据阅读器读取后立即关闭连接。
您确定连接池中的连接没有保持打开状态,还是计数一直在增加?
看起来GetInfo并没有返回很多数据。最好不要像这样传递DataReader。在GetInfo内部,执行Read并返回一个包含信息的对象,而不是返回DataReader。速度上的差异将是无关紧要的,你将消除你所经历的所有痛苦。