在.NET框架中,ASP.NET和C#是常用的Web应用程序开发技术。C#作为一种强类型、面向对象的语言,提供了丰富的库支持来与各种数据库进行交互。本文将深入探讨如何使用C#编写一个数据库访问公共类,以实现对SQL Server、Access和Oracle等不同数据库的通用操作。
我们要创建一个数据库访问的基类,这个类通常包含连接数据库的基本方法,如打开、关闭连接,以及执行SQL语句的方法。以下是一个简单的示例:
```csharp
using System.Data;
using System.Data.SqlClient; // SQL Server
// using System.Data.OleDb; // OleDb
public abstract class DatabaseAccess
{
protected string ConnectionString { get; set; }
public DatabaseAccess(string connectionString)
{
ConnectionString = connectionString;
}
protected IDbConnection OpenConnection()
{
IDbConnection connection = CreateConnection();
connection.Open();
return connection;
}
protected void CloseConnection(IDbConnection connection)
{
if (connection != null && connection.State == ConnectionState.Open)
{
connection.Close();
}
}
protected abstract IDbConnection CreateConnection();
public abstract DataTable ExecuteQuery(string sql);
public abstract int ExecuteNonQuery(string sql);
}
```
在这个基类中,`OpenConnection`和`CloseConnection`方法用于管理数据库连接的生命周期,而`ExecuteQuery`和`ExecuteNonQuery`是执行SQL查询和非查询操作的抽象方法,需要在具体的数据访问子类中实现。
针对不同的数据库,我们需要创建对应的子类,例如`SqlDatabaseAccess`、`AccessDatabaseAccess`和`OracleDatabaseAccess`。这些子类会覆盖基类中的`CreateConnection`、`ExecuteQuery`和`ExecuteNonQuery`方法,以便于处理特定数据库的细节。
以SQL Server为例,`SqlDatabaseAccess`子类可能如下所示:
```csharp
public class SqlDatabaseAccess : DatabaseAccess
{
public SqlDatabaseAccess(string connectionString) : base(connectionString) {}
protected override IDbConnection CreateConnection()
{
return new SqlConnection(ConnectionString);
}
public override DataTable ExecuteQuery(string sql)
{
using (var connection = OpenConnection())
{
var command = new SqlCommand(sql, connection);
var adapter = new SqlDataAdapter(command);
var dataTable = new DataTable();
adapter.Fill(dataTable);
return dataTable;
}
}
public override int ExecuteNonQuery(string sql)
{
using (var connection = OpenConnection())
{
var command = new SqlCommand(sql, connection);
return command.ExecuteNonQuery();
}
}
}
```
对于Access和Oracle数据库,类似的子类可以创建,只是`CreateConnection`方法会返回对应的数据库连接对象,比如`OleDbConnection`或`OracleConnection`,并使用相应的SQL命令和适配器。
通过这种方式,我们可以在应用中统一地调用`DatabaseAccess`的子类方法,实现跨数据库的操作。这样做的优点是代码复用高,维护方便,同时降低了数据库切换的成本。
总结一下,创建一个ASP.NET和C#的数据库访问公共类涉及以下关键点:
1. 设计一个抽象基类,定义通用的数据库操作方法。
2. 实现针对特定数据库的子类,覆盖基类的方法,实现数据库特有的功能。
3. 使用工厂模式或者依赖注入,根据实际需求动态创建和使用合适的数据库访问类。
4. 注意资源管理,确保数据库连接在使用完毕后及时关闭,避免资源泄露。
这个设计模式使得我们的应用程序能够灵活地适应不同类型的数据库,提高了代码的可扩展性和可维护性。在实际项目中,可以根据业务需求进一步完善这个公共类,比如添加事务支持、错误处理等功能,使其更加健壮和实用。