定义数据库提供程序类型
[Flags]
public enum arscDatabaseProvider
{
arscOracle=1, //Oracle数据库
arscMsSql=2, //Sql Server数据库
arscOledb=4,//Access、Execl等微软的本地数据库
arscOdbc=8,//ODBC驱动连接的数据库
arscRomete = arscOracle | arscSqlserver //远程数据库连接
}
[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");