正准备设计一个系统,目标数据库是采用Oracle,因技术和软件环境,在开发程序时,我只能采用access,问题就是怎么样有效的进行两数据库的相互切换。因为oracle和access切换不仅仅是connection,还有DataAdapter等等。
构想一:看有没有既适用于access,又适用于oracle的data,比如采用共同的connection、DataAdapter类等。但不知道有没有这样的类,System.Data.OleDb可否实现这一点?
构想二:在没有确认构想一的情况下,我自己想建立一个类库,根据数据源去分别调整父类从而适用于access与oracle数据源,如:
public class SmartDataAdapter:(System.Data.OleDb.OleDbDataAdapter 或 System.Data.OracleClient.OracleDataAdapter)
当要投入到Oracle中去使用时,只需更改w继承oracle的数据库类。但Data的类都是被封装了,没办法实现。
因为数据源是不确定的,所以数据源肯定要被独立出来,怎样独立?是建立一个控件实现asp中的incude(不知道可否保护自己的源代码),还是通过写一个类库或其它方式。独立哪些更为合适,是不是只独立connection?放各位大侠指点,若有阐述不清的,请指出。
构想一:看有没有既适用于access,又适用于oracle的data,比如采用共同的connection、DataAdapter类等。但不知道有没有这样的类,System.Data.OleDb可否实现这一点?
构想二:在没有确认构想一的情况下,我自己想建立一个类库,根据数据源去分别调整父类从而适用于access与oracle数据源,如:
public class SmartDataAdapter:(System.Data.OleDb.OleDbDataAdapter 或 System.Data.OracleClient.OracleDataAdapter)
当要投入到Oracle中去使用时,只需更改w继承oracle的数据库类。但Data的类都是被封装了,没办法实现。
因为数据源是不确定的,所以数据源肯定要被独立出来,怎样独立?是建立一个控件实现asp中的incude(不知道可否保护自己的源代码),还是通过写一个类库或其它方式。独立哪些更为合适,是不是只独立connection?放各位大侠指点,若有阐述不清的,请指出。
解决方案 »
- 怎么根据需求dropdownlist是否回传?
- SQL语句. 重复ID且带条件过滤查询
- .net部署的简单问题!!
- 页面送显的问题。
- 如何取得所在时间的星期日的时间?
- 关于girdview模版列 Dropdownlist取值的一些问题
- PowerDesigner 如何建立表连接
- 可以将多个XML文件读入一个DataSet中吗(1个XML对应DataSet中个1个表)???(VB.NET)
- 数据库如果连不上会提示什么错误吗?
- C#在后台动态的给table添加一行,调用前台table时行没有增加,如何实现前台和后台的同步更改
- 为什么连接不上SQL2000(十万火急在线等)
- 为什么从HTML页面POST过来的中文数据变成?号呢
/// ConnectionType 的摘要说明。
/// </summary>
enum ConnectionType
{
SqlClient = 1,
OleDb,
Oracle
}/// <summary>
/// 创建 DbDataAdapete 对象
/// </summary>
/// <returns>DbDataAdapete 对象</returns>
public static IDbDataAdapter CreateDbDataAdapter()
{
switch ( connectionType )
{
case ConnectionType.SqlClient :
{
return new SqlDataAdapter();
}
case ConnectionType.OleDb :
{
return new OleDbDataAdapter();
}
default :
{
throw new Exception("Error DbDataAdapter");
}
}
}
www.webmis.com.cn
reaperwu的办法是分别对access和oracle都要去写相应的代码,不同的connection,不同的DataAdapter,在业务层也得去分别写出不同的程序,怎样提高代码重用性。
{
public abstract class DataProvider
{
public abstract string GetDataProvider();
} public class OleDbDataProvider : DataProvider
{
public override string GetDataProvider()
{
return "OleDbDataProvider";
}
} public class SqlDataProvider : DataProvider
{
public override string GetDataProvider()
{
return "SqlDataProvider";
}
} public class DataProviderFactory
{
public static DataProvider GetDataProvider(string ProviderType)
{
if (ProviderType.ToLower() == "oledbdataprovider")
{
return new OleDbDataProvider();
}
else
{
return new SqlDataProvider();
}
}
} public class Factory
{
public static void Main()
{
Console.WriteLine(DataProviderFactory.GetDataProvider("OleDbDataProvider").GetDataProvider());
}
}
}
在ORACLE中,它的SQL操作与ACCESS有极大的不同,并且关于超大文本的处理方式也是差别很大.比如说:在ACCESS数据库中,存储大量的文本,可以用备注字段,但在ORACLE中,一般的文本只有存储到4000个字节,超过后只能使用CLOB字段,但CLOB字段的写入方式在一些条件下有很大不同.
另外,比如在ACCESS里面,提取数据可以使用TOP 10的方式来进行,但在ORACLE中,这种方式不可行.
另外,调用函数/存储过程等,在ACCESS里面根本没有办法.
如果你是ACCESS与MS SQLSERVER,问题还少点,但ACCESS与ORACLE两者之间,确实差别很大.建议你不要这样做.
其实你完全可以在自己的机器上安装一个ORACLE数据库,这并不困难.
[email protected]====CSDN 小助手 V2.5 2005年11月05日发布====
CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2
使用用工厂模式,这样的话就可以用“借口隔离细节”
IDbDataAdapter dataAdapter = DatabaseFactory.CreateDbDataAdapter();
dataAdapter.SelectCommand = command;
dataAdapter.Fill(dataSet);