【问题标题】:How to close db connections used by GridView control in asp.net如何关闭 GridView 控件在 asp.net 中使用的数据库连接
【发布时间】:2009-11-24 08:46:38
【问题描述】:

我有一个网站,其中的页面包含 GridView。我正在使用 SQL 数据源控件与 GridView 绑定。运行站点后,我正在使用 -

检查与 SQL Server 的活动连接数

选择 db_name(dbid) 作为 DatabaseName,count(dbid) 作为 NoOfConnections, 登录名作为登录名 FROM sys.sysprocesses 哪里 dbid > 0 GROUP BY dbid,登录名

我发现即使在退出我的 Web 应用程序后,连接仍然保持打开状态。 那么有什么方法可以关闭这些连接。这对我来说非常重要,因为随着用户数量的增加,没有。活动连接的数量也在增加,导致 sql server max pool 问题。虽然我增加了 sql server 上的用户连接,但我需要在用户注销后立即明确关闭这些连接的解决方案。

感谢您分享宝贵的时间。

【问题讨论】:

    标签: asp.net sql-server


    【解决方案1】:

    您是否尝试在完成后调用数据源的 .Dispose()?

    就个人而言,在需要管理与 SQL Server 的连接数的情况下,我会远离 SqlDataSource。相反,我会在后面的代码中执行所有操作,包裹在“使用”块中。尤其是在处理打开和关闭连接时(当多个连接打开时很容易忘记关闭 1 个连接)。

    “使用”提供了 Dispose 模式的快捷方式 - Using

    【讨论】:

    • 谢谢米克!我可以这样做,但没有办法关闭这些连接吗?
    • 不明确, - 使用 SqlDataSource 时总会出现连接不会关闭的情况(例如,用户可以简单地关闭浏览器)。
    • 正如 treaschf 所说,您可以在 web.config 文件中关闭连接池;但是,与 Max Pool Size(限制连接数)一样,除非您知道自己在做什么,否则我真的不建议您使用它,尤其是在 Web 应用程序中,因为错误的设置将导致客户端不得不等到在他们看到任何数据驱动页面之前断开连接 - 这很可能会导致超时。
    • 再次感谢 Mick 的精彩解释。所以在你看来,没有明确的方法....
    • 您唯一可以明确假设的是用户永远不会按照您希望的方式行事。所以最好不要依赖用户。
    【解决方案2】:

    由于使用了连接池,您的连接保持“打开”状态。关闭连接池,如果这是所需的行为,或者限制一次可以打开的连接数。这些可以从连接字符串中设置。

    【讨论】:

    • 谢谢哥们!你亲自检查过吗?因为设置 pool off 后并不能解决我的问题。
    • 我没有。但是我敢肯定,SqlDataSource 在使用它后会关闭连接,最近一次是在您的 ASP.Net 页面被卸载时。我从来没有遇到过问题。但是,当使用连接池时,关闭连接并不会真正关闭它。它只是将它放回池中,以便下次需要连接时重用它。
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多