首页 > 后端开发 > C++ > 如何解决ASP.NET中的'执行程序需要开放且可用的连接”错误?

如何解决ASP.NET中的'执行程序需要开放且可用的连接”错误?

Patricia Arquette
发布: 2025-01-31 12:31:11
原创
679 人浏览过

How to Resolve

解决“ExecuteReader 需要打开且可用的连接”问题

在 ASP.NET 应用程序中,并发连接可能由于底层连接处于“连接中”状态而导致“ExecuteReader requires an open and available Connection”错误。这主要发生在使用静态连接字符串和连接时。

静态连接的性能和同步问题

静态连接会通过绕过 ADO.NET 连接池机制来影响性能。连接池通过为每个配置使用一组活动连接来优化性能。如果不关闭连接,则会累积已使用的连接,可能超过最大池大小并导致异常。

此外,静态连接为在 ASP.NET 等多线程环境中访问它们的全部线程创建单个锁。这会导致性能问题,并可能导致您遇到的异常。

最佳实践

为了解决此问题并提高性能和可靠性,请遵循以下最佳实践:

  • 避免重复使用连接或 ADO.NET 对象。
  • 不要将连接声明为静态的。
  • 在使用它们的函数范围内创建、打开、使用、关闭和释放连接。
  • 使用“using”语句自动释放和关闭连接。

代码重构示例

以下是符合最佳实践的“retrievePromotion”方法的重构示例:

public Promotion retrievePromotion(int promotionID)
{
    Promotion promo = null;
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MainConnStr"].ConnectionString;
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        string queryString = "SELECT PromotionID, PromotionTitle, PromotionURL FROM Promotion WHERE PromotionID=@PromotionID";
        using (SqlDataAdapter da = new SqlDataAdapter(queryString, connection))
        {
            DataTable tblPromotion = new DataTable();
            da.SelectCommand.Parameters.Add("@PromotionID", SqlDbType.Int);
            da.SelectCommand.Parameters["@PromotionID"].Value = promotionID;

            try
            {
                connection.Open();
                da.Fill(tblPromotion);
                if (tblPromotion.Rows.Count > 0)
                {
                    DataRow promoRow = tblPromotion.Rows[0];
                    promo = new Promotion()
                    {
                        promotionID = promotionID,
                        promotionTitle = promoRow.Field<string>("PromotionTitle"),
                        promotionUrl = promoRow.Field<string>("PromotionURL")
                    };
                }
            }
            catch (Exception ex)
            {
                // 处理异常或将其抛出到堆栈跟踪。
                // 使用语句会自动关闭连接,因此无需 finally 块来关闭连接。
                throw;
            }
        }
    }
    return promo;
}
登录后复制

通过遵循这些准则,您可以为您的 ASP.NET 应用程序建立一个可靠且高效的数据访问层。

以上是如何解决ASP.NET中的'执行程序需要开放且可用的连接”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板