ADO.NET数据访问层

本文关键字:访问 数据 NET ADO | 更新日期: 2023-09-27 18:20:44

我正在维护一个现有的C#应用程序,该应用程序使用经典的ADO.NET作为数据访问技术。现有代码创建SqlConnectionSqlCommand对象的一个新实例EVERY每次需要与数据库进行一些交互。为了更简单,我写了一个小类来简化这个过程,以防止代码重复,但我不是ADO.NET的专家,所以我想问你是否可以查看我的代码,并告诉我我是否错过了任何ADO.NET最佳实践,或者下面的代码是否会对数据库操作产生负面影响:

using System;
using System.Data;
using System.Data.SqlClient;
namespace MyApp.DataAccess
{
    public class DataAccessLayer : IDisposable
    {
        private SqlConnection _connection = new SqlConnection();
        private SqlCommand _command = new SqlCommand();
        public string ConnectionString 
        {
            get { return DBConfig.ConnectionString; }
        }
        public SqlCommand Command 
        {
            get { return _command; }
            set { _command = value; }
        }
        public SqlConnection SQLConnection 
        {
            get
            {
                if(_connection == null || _connection.State == ConnectionState.Closed)
                {
                    _connection = new SqlConnection(ConnectionString);
                    _connection.Open();
                }
                return _connection;
            }
        }
        public void SetCommand(string commandText,CommandType commandType)
        {
            _command = new SqlCommand(commandText, SQLConnection);
            _command.CommandType = commandType;
        }
        public void Dispose()
        {
            if (_connection != null)
                _connection.Dispose();
            if (_command != null)
                _command.Dispose();
        }
    }
}

ADO.NET数据访问层

正如Tim所解释的,我宁愿用using语句来编码。这将自动关闭并处置您的SqlConnection实例。

从MSDN页面上看一下这个关于SqlConnection类的示例:

using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        // Do work here; connection closed on following line.
    }


model_dialog解释的也是正确的。如果在SqlConnection类上调用Open方法,则框架将不必真正打开新连接。

相反,它将检查连接池中是否已经有合适的连接可用。它通过检查连接字符串来完成此操作。如果它找到了一个合适的连接,连接池只会返回这个连接,几乎不会对性能产生影响。可以说,连接池是SqlConnections的捕获组件。

有关更多详细信息,请参阅此处:SQL Server连接池(ADO.NET)