项目使用的是.NET MVC5 + 三层 + Dapper 架构,下面我帖下关键代码:
BaseDAL:
public IDbConnection Conn { get { return CreateConnection(); } } public static IDbConnection CreateConnection() { IDbConnection conn = null; switch (connectionName) { case "SQLServer": conn = new SqlConnection(connStr); break; default: conn = new SqlConnection(connStr); break; } conn.Open(); return conn; }
分页列表代码:
public List<ContentModel> GetPageList(int pageSize, int pageIndex, out int rowCount, bool isAsc) { using (Conn) { string sortAsc; if (isAsc) { sortAsc = "asc"; } else { sortAsc = "desc"; } int start = (pageIndex - 1) * pageSize + 1; int end = pageIndex * pageSize; StringBuilder sql = new StringBuilder(); sql.Append("select * from(select *, Row_Number() over(order by id " + sortAsc + ") as rowNumber from " + tb + ")t where t.rowNumber >= @start and t.rowNumber <= @end "); List<ContentModel> result = Conn.Query<ContentModel>(sql.ToString(), new { start = start, end = end }).ToList(); rowCount = GetCount(); return result; } }
然后我前台列表页快速点下一页下一页,不一会数据库链接池就满了。
我的代码是否承在问题?我看别 人的例子都是这样写的啊。以前用sqlhelper的时候没有发现这个问题。
也有可能代码没有问题,是网络问题
我的是本地开发环境。加了max pooling就不会出现了。
conn.Open(); 不要加入了;
Dapper会默认处理,没有Open 就会打开,使用完毕会释放。