C#处理多种数据库类型?

时间:2009-09-01 23:21:52

标签: c# mysql database sqlite

我有一个应用程序需要能够使用sqlite3数据库或mysql数据库。客户希望能够在两者之间做出选择(显然一个是本地的,一个是在线的)。

我这样做的想法是创建一个包含所有常用方法(ExecuteReader,ExecuteScalar等)的数据库接口,然后使用扩展此接口的SQLite3Database类和扩展它的MySQLDatabase类。在应用程序初始化时,它将根据客户选择的设置创建数据库接口。

但是,如果我执行此路由,那么我将无法访问Server Explorer以及添加数据集的简单方法等。

所以我的问题是......我是否以正确的方式解决这个问题?我错过了更好的选择吗?如果没有,当我创建数据连接点VIA代码时,如何才能访问服务器资源管理器?

感谢。

2 个答案:

答案 0 :(得分:7)

如果申请是非平凡的,那么我会说你应该看看ORM工具。

它不会解决100%的问题,但它会让你到达那里。例如,NHibernate是我当前项目的ORM,并且几乎没有特定于数据库的代码。

答案 1 :(得分:1)

您可以使用OR / M为您提取所有数据库细节。

或者,您可以为您的应用程序创建自己的数据访问层。您可以编写一些DAL接口(例如包含'GetPersonById'方法)。然后,您可以为这些接口编写几个实现:

  • 一个针对MySQL的实现
  • 另一个针对SqlLite3的实现。

在您的应用程序中,您针对接口进行编程,而不是直接对实现进行编程。 编写一个工厂类,可以立即正确实现这些接口(例如,基于配置设置)。