ASP.NET中重用MS Access迁移到SQL Server的数据库连接的最佳做法是什么?

问题描述 投票:0回答:2

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

  1. 全球私人变量:

    一种。 优点:如果更改数据库提供商,则易于维护

    湾 缺点:不能使用'using'子句,连接可能会保持打开太长时间 - 连接保持打开多长时间?

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

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

    湾 缺点:烦人的维护和传递param无处不在

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

    一种。 问题:这是最慢的,因为您必须多次重新打开相同的连接吗? 或者因为幕后连接池这不慢? 因此,这可能是最好的做法......?

    湾 问题:连接池是否仅与SQL Server相关,因此不适用于MS Access?

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

但是在阅读了一些文章之后,比如在使用ASP.NET和Web服务时最有效地获取SQL连接

似乎我可以随时随地使用'using'子句创建一个新的连接,而不会受到性能影响?

c# asp.net connection connection-pooling
2个回答
1
投票

ASP.Net 汇集了数据库连接,因此您不必担心这些低级别的详细信息。 看看这篇MSDN文章的技巧3


1
投票

最佳做法是根本不重复使用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();
}
© www.soinside.com 2019 - 2024. All rights reserved.