数据库访问层的设计与实现

在软件开发中,数据访问层(Data Access Layer,简称DAL)是应用程序与数据库之间的桥梁。它负责执行数据库操作,如查询、插入、更新和删除数据。本文将探讨如何设计和实现一个高效、灵活且易于维护的数据访问层。

构造函数的设计

数据访问层的构造函数是初始化数据库连接的关键。可以通过构造函数来接收连接字符串、已存在的数据库连接对象,或者不传递任何参数来创建一个新的连接。以下是构造函数的实现:

public class Database { private SqlConnection connection; private SqlCommand dbCommand; public Database(string Connection) { connection = new SqlConnection(Connection); InitialiseCommand(); } public Database(SqlConnection Connection) { connection = Connection; InitialiseCommand(); } public Database() { connection = new SqlConnection(); InitialiseCommand(); } private void InitialiseCommand() { try { if (dbCommand == null) { dbCommand = new SqlCommand(); dbCommand.CommandType = CommandType.StoredProcedure; if (connection != null) { dbCommand.Connection = connection; } } } catch (System.Exception ex) { throw ex; } } }

上述代码展示了数据访问层的构造函数。它支持三种初始化方式:通过连接字符串、通过已存在的连接对象或者不传递任何参数。每种方式都会调用InitialiseCommand方法来初始化命令对象。

执行存储过程

执行存储过程是数据访问层的常见操作之一。需要定义两个方法:一个用于执行不返回数据的存储过程,另一个用于执行返回数据的存储过程。以下是这两个方法的实现:

public void Execute() { try { if (dbCommand.Connection.State != ConnectionState.Open) dbCommand.Connection.Open(); dbCommand.ExecuteNonQuery(); } catch (System.Exception ex) { throw ex; } } public DataTable Execute(string TableName) { SqlDataAdapter da; DataSet ds; DataTable dt = new DataTable(); try { da = new SqlDataAdapter(dbCommand); ds = new DataSet(); da.Fill(ds, TableName); if (ds.Tables.Count > 0) dt = ds.Tables[0]; } catch (System.Exception ex) { throw ex; } return dt; }

第一个方法Execute用于执行不返回数据的存储过程。它首先检查数据库连接是否打开,如果不是,则打开连接,然后执行存储过程。第二个方法Execute用于执行返回数据的存储过程。它使用SqlDataAdapterDataSet来填充返回的数据表。

继承类的应用

在实际应用中,通常会创建继承自基础数据访问类的具体类,以实现特定业务逻辑。以下是如何定义和使用继承类的例子:

public class NewsMashupDB : Database, IDisposable { public NewsMashupDB() : base() { } public NewsMashupDB(string ConnectionString) : base(ConnectionString) { } public void CreateStory(string Headline, string Description, string Url, string Supplier, long PubDateValue) { SqlParameter paramHeadline = new SqlParameter("@Headline", SqlDbType.VarChar); SqlParameter paramDescription = new SqlParameter("@Description", SqlDbType.VarChar); SqlParameter paramUrl = new SqlParameter("@Url", SqlDbType.VarChar); SqlParameter paramSupplier = new SqlParameter("@Supplier", SqlDbType.VarChar); SqlParameter paramPubDate = new SqlParameter("@PubDateValue", SqlDbType.BigInt); CommandText = "NewsMashup.CreateStory"; try { paramHeadline.Value = Headline; paramDescription.Value = Description; paramUrl.Value = Url; paramSupplier.Value = Supplier; paramPubDate.Value = PubDateValue; dbCommand.Parameters.Clear(); dbCommand.Parameters.Add(paramHeadline); dbCommand.Parameters.Add(paramDescription); dbCommand.Parameters.Add(paramUrl); dbCommand.Parameters.Add(paramSupplier); dbCommand.Parameters.Add(paramPubDate); Execute(); } catch (System.Exception ex) { throw ex; } } public DataTable RetrieveNewsFeeds() { DataTable dt = new DataTable(); try { CommandText = "NewsMashup.RetrieveNewsFeeds"; dt = Execute("NewsFeeds"); } catch (System.Exception ex) { throw ex; } return dt; } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485