ADO.NET数据访问层
本文关键字:访问 数据 NET ADO | 更新日期: 2023-09-27 18:20:44
我正在维护一个现有的C#应用程序,该应用程序使用经典的ADO.NET作为数据访问技术。现有代码创建SqlConnection
和SqlCommand
对象的一个新实例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();
}
}
}
正如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)