【问题标题】:What is the best practice in ASP.NET for re-using a database connection for MS Access migrating to SQL server?ASP.NET 中重新使用数据库连接以将 MS Access 迁移到 SQL 服务器的最佳实践是什么?
【发布时间】:2012-10-10 13:50:52
【问题描述】:

在具有大约 5 个使用同一数据库的 Web 方法的 ASP.NET Web 服务 (C# 4.0) 中打开和重用数据库连接的最佳做法是什么?理想情况下,MS Access 和 SQL 服务器的答案是相同的。

  1. 全局私有变量:

    一个。优点:如果更改数据库提供程序,易于维护

    b.缺点:无法使用“using”子句,连接可能保持打开的时间过长——连接大约保持打开多长时间?

  2. 将 db 连接作为方法参数传递:

    一个。优点:可以在不需要时关闭连接使用'using'子句

    b.缺点:到处维护和传递参数很烦人

  3. 在任何方法需要时使用 using 子句打开和关闭连接:

    一个。问题:这是最慢的,因为您必须多次重新打开同一个连接?或者因为幕后的连接池,这不是更慢吗?因此,这可能是最佳实践……?

    b.问题:连接池是否仅与 SQL 服务器相关,因此不适用于 MS Access?

起初我正在考虑使用全局私有变量 (OleDbConnection),因为我在 Web 方法和支持方法中使用到主数据库的连接相当多,并且将在不久的将来从 MS Access 迁移到 SQL Server并且很容易做出改变。

但是在阅读了一些文章后,比如Obtaining SQL connection most efficiently when using ASP.NET and web services

似乎我可以在任何地方使用“using”子句按需创建新连接而不会受到性能影响?

【问题讨论】:

    标签: c# asp.net connection connection-pooling


    【解决方案1】:

    ASP.Net pools 数据库连接,因此您不必担心这些低级细节。看看Tip 3 of this MSDN article

    【讨论】:

      【解决方案2】:

      最佳做法是根本不重复使用您的 Connection 对象。

      public void GetEmployees() As List<Employee> {
          var employees = new List<Employee>();
          using (var connection = new SqlConnection(Configuration.ConnectionString)) {
              using (var command = connection.CreateCommand()) {
                  command.CommandText = "SELECT * FROM dbo.Employee";
                  connection.Open();
                  using (var reader = command.ExecuteReader()) {
                      while (reader.Read()) {
                          employees.Add(Employee.CreateRecordFromOpenReader(reader));
                      }
                  }
              }
          }
      
          return employees;
      }
      

      然后,如果您需要任何使用此功能的交易,请设置 DTC 并执行此操作。

      using (var scope = new TransactionScope()) {
          var employees = GetEmployees();
          employees.Map((e) => e.Status = Status.Active);
          scope.Complete();
      }
      

      【讨论】:

        猜你喜欢
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        相关资源
        最近更新 更多