求助!关于多种数据库开发.如何做到无缝切换(最好能用接口的方式)
各位好!我做一个音乐网站.需要使用sql和access两种数据库,即设计一个sql版的,一个access版的,如果有需要还可以加入其它数据库的版本.
现在有一个问题:如何让sql和access在应用中做到无缝切换..就是说要使用哪种数据库只要在web.config中进行配置就可以了.
现在我的做法是
public sealed class odbHelper { public static OleDbDataReader ExecuteDataReader(string ASqlStr) { OleDbConnection cn = new OleDbConnection(cnStr); cn.Open(); OleDbDataReader dr = null; try { OleDbCommand cmd = new OleDbCommand(ASqlStr, cn); dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); return dr; } catch (OleDbException ex) { EventLog.WriteEntry(EventLogSource, ex.Message + " " + ASqlStr); throw new Exception("SQL错误: " + ex.Message); } //finally //{ // cn.Close(); //} } } public sealed class mydbHelper { public OleDbDataReader dr; public mydbHelper(){ } }
mydbHelper mydb = new mydbHelper(); mydb.dr=odbHelper.ExecuteDataReader(sql);
public abstract class TestDataProviderBase { public abstract string GetTestName(); public static TestDataProviderBase Instance() { //这里应该从配置文件读数据,利用反射实例化当前提供者(单件) return null; } }; public class OleTestDataProviderBase:TestDataProviderBase { public override string GetTestName() { return "Access"; } } public class SqlTestDataProviderBase:TestDataProviderBase { public override string GetTestName() { return "Sql"; } } public class InvokeDemo { public void Test() { string str = TestDataProviderBase.Instance().GetTestName(); } };
[解决办法]
有现成的...
Microsoft Enterprise Library 之 Microsoft.Practices.EnterpriseLibrary.Data
你把它的代码全看懂了就成高手了...
[解决办法]
建议学习参考 petshop4.0中关于数据库部分的设计 。正好满足LZ的需求 。
[解决办法]
olu.desktopit.net 这里是一个用户在线模块,功能比较简单,就是用这种思路实现的,有全部的c#源码可下,你可以去看看
[解决办法]
理由抽象工程 加上 反射来实现
petshop cs .text 都是 看一下源码就知道了 其实简单点说就说用借口来编程
[解决办法]
接口或抽象类,低层封装,外层只管获得数据数
这个应该是基本的OO吧
[解决办法]
接口或抽象类,低层封装,外层只管获得数据数
这个应该是基本的OO吧
这个有点难度的可以就是断判数据源,可以参考LZ说的那个链接
[解决办法]
偶是写不同的数据访问层,然后通过接口,反射实现你说的功能