利用.net开发可扩展的数据访问架构
2007-07-26 10:01
423 查看
定义数据库提供程序类型
[Flags]
public enum arscDatabaseProvider
{
arscOracle=1, //Oracle数据库
arscMsSql=2, //Sql Server数据库
arscOledb=4,//Access、Execl等微软的本地数据库
arscOdbc=8,//ODBC驱动连接的数据库
arscRomete = arscOracle | arscSqlserver //远程数据库连接
}
定义工厂接口:
public interface IDBFactory
{
IDBConnection GetConnection();
IDBConnection GetConnection(string connectString);
IDBDataAdapter GetDataAdapter();
IDBDataAdapter GetDataAdapter(IDBCommand command);
//..........
}
实现接口:
public class OleDBFactory:IDBFactory
{
public IDBConnection GetConnection()
{
return new OleDbConnection();
}
public IDBConnection GetConnection(string connectString)
{
return new OleDbConnection(connectString);
}
public IDBDataAdapter GetDataAdapter()
{
return new OleDbDataAdapter();
}
public IDBDataAdapter GetDataAdapter(IDBCommand command)
{
OleDbDataAdapter adapter =new OleDbDataAdapter();
adapter.SelectCommand=command;
return adapter ;
}
}
实现接口:
public class OracleDBFactory:IDBFactory
{
public IDBConnection GetConnection()
{
return new OracleConnection();
}
public IDBConnection GetConnection(string connectString)
{
return new OracleConnection(connectString);
}
public IDBDataAdapter GetDataAdapter()
{
return new OracleDataAdapter();
}
public IDBDataAdapter GetDataAdapter(IDBCommand command)
{
OracleDataAdapter adapter =new OracleDataAdapter();
adapter.SelectCommand=command;
return adapter ;
}
}
////下面几个类按照改思路继续写下去.如MsSqlDbFactory.ODBCDbFactory.
下面定义类封装数据库操作
public class DBOperator
{
private string connectString;
private arscDatabaseProvider provider;
private static DBOperator operator=null;
private DBOperator(){};
private DBOperator(string connectionString,arscDatabaseProvider provider)
{
this.connectString=connectionString;
this.provider=provider;
}
public static DBOperator GetInstance(string connectionString,arscDatabaseProvider provider)
{
if(operator == null)
operator=new DBOperator(connectionString,provider);
return operator ;
}
public DataTable Query(string sql)
{
IDBFactory dbFactory=Singleton.CreateFactory(provider);
IDBConnection conn=dbFactory.GetConnection(connectString);
IDBCommand command=conn.CreateCommand();
command.CommandType=CommandType.Text;
command.CommandText=sql;
IDBDataAdapter adapter=dbFactory.GetDataAdapter(command);
DataSet ds=new DataSet();
try
{
if(conn.State !=ConnectionState.Open)
conn.Open();
adapter.Fill(ds);
}
catch
{
throw;
}
finally
{
conn.Close();
}
ds.Tables.Count>0 ?return ds.Tables[0]:return null;
}
public void Update(string sql)
{//........................}
//..........................................
}
..定义数据访问类
public clsss DbAccess
{
private DBOperator operator;
public DbAccess(DBOperator operator){this.operator=operator;}
public Students GetStudents(string sql)
/////...........
}
访问代码
arscDatabaseProvider provider=arscDatabaseProvider.arscOledb;
string connString=@"C:/data.mdb";
DBOperator operator=DBOperator .GetInstance(connString,provider)
DbAccess dbAccess=new DbAccess(operator);
Students stus=dbAccess.GetStudents("select * from Students");
[Flags]
public enum arscDatabaseProvider
{
arscOracle=1, //Oracle数据库
arscMsSql=2, //Sql Server数据库
arscOledb=4,//Access、Execl等微软的本地数据库
arscOdbc=8,//ODBC驱动连接的数据库
arscRomete = arscOracle | arscSqlserver //远程数据库连接
}
定义工厂接口:
public interface IDBFactory
{
IDBConnection GetConnection();
IDBConnection GetConnection(string connectString);
IDBDataAdapter GetDataAdapter();
IDBDataAdapter GetDataAdapter(IDBCommand command);
//..........
}
实现接口:
public class OleDBFactory:IDBFactory
{
public IDBConnection GetConnection()
{
return new OleDbConnection();
}
public IDBConnection GetConnection(string connectString)
{
return new OleDbConnection(connectString);
}
public IDBDataAdapter GetDataAdapter()
{
return new OleDbDataAdapter();
}
public IDBDataAdapter GetDataAdapter(IDBCommand command)
{
OleDbDataAdapter adapter =new OleDbDataAdapter();
adapter.SelectCommand=command;
return adapter ;
}
}
实现接口:
public class OracleDBFactory:IDBFactory
{
public IDBConnection GetConnection()
{
return new OracleConnection();
}
public IDBConnection GetConnection(string connectString)
{
return new OracleConnection(connectString);
}
public IDBDataAdapter GetDataAdapter()
{
return new OracleDataAdapter();
}
public IDBDataAdapter GetDataAdapter(IDBCommand command)
{
OracleDataAdapter adapter =new OracleDataAdapter();
adapter.SelectCommand=command;
return adapter ;
}
}
////下面几个类按照改思路继续写下去.如MsSqlDbFactory.ODBCDbFactory.
下面定义类封装数据库操作
public class DBOperator
{
private string connectString;
private arscDatabaseProvider provider;
private static DBOperator operator=null;
private DBOperator(){};
private DBOperator(string connectionString,arscDatabaseProvider provider)
{
this.connectString=connectionString;
this.provider=provider;
}
public static DBOperator GetInstance(string connectionString,arscDatabaseProvider provider)
{
if(operator == null)
operator=new DBOperator(connectionString,provider);
return operator ;
}
public DataTable Query(string sql)
{
IDBFactory dbFactory=Singleton.CreateFactory(provider);
IDBConnection conn=dbFactory.GetConnection(connectString);
IDBCommand command=conn.CreateCommand();
command.CommandType=CommandType.Text;
command.CommandText=sql;
IDBDataAdapter adapter=dbFactory.GetDataAdapter(command);
DataSet ds=new DataSet();
try
{
if(conn.State !=ConnectionState.Open)
conn.Open();
adapter.Fill(ds);
}
catch
{
throw;
}
finally
{
conn.Close();
}
ds.Tables.Count>0 ?return ds.Tables[0]:return null;
}
public void Update(string sql)
{//........................}
//..........................................
}
..定义数据访问类
public clsss DbAccess
{
private DBOperator operator;
public DbAccess(DBOperator operator){this.operator=operator;}
public Students GetStudents(string sql)
/////...........
}
访问代码
arscDatabaseProvider provider=arscDatabaseProvider.arscOledb;
string connString=@"C:/data.mdb";
DBOperator operator=DBOperator .GetInstance(connString,provider)
DbAccess dbAccess=new DbAccess(operator);
Students stus=dbAccess.GetStudents("select * from Students");
相关文章推荐
- [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考
- .NET 分布式架构开发实战之三 数据访问深入一点的思考
- [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考
- .NET 分布式架构开发实战之三 数据访问深入一点的思考
- 一起谈.NET技术,.NET 分布式架构开发实战之三 数据访问深入一点的思考
- .NET 分布式架构开发“.NET研究”实战之三 数据访问深入一点的思考
- 精华的微软文章".NET 数据访问架构指南",特别是数据库连接的测试.即监视链接池化 (2)
- .NET 数据访问架构指南(二)
- 利用Cache缓存数据DataTable数据提高大数据量访问性能-.NET教程,数据库应用
- .NET 数据访问架构指南(一)
- 利用 Dojo Data 开发统一的数据访问模型
- .NET 数据访问架构指南(二)
- .NET 数据访问架构指南
- .NET 数据访问架构指南
- .net中利用oracle产品自带的数据访问组件(Oracle.DataAccess.dll)提升批量更新操作的执行效率
- USB驱动开发之远程访问USB设备扩展(linux平台USB设备数据采集端)
- .NET 数据访问架构指南
- 精华的微软文章".NET 数据访问架构指南",特别是数据库连接的测试.即监视链接池化(1)
- .NET 数据访问架构指南(转)
- .NET 数据访问架构指南二