我有这个项目,我尝试实现一种方法,以便我可以连接到任何数据库。在这个网站(和谷歌)之后,实现这一目标的最佳做法是使用工厂模式(我看到一些人指的是一个抽象的工厂模式,但我从未使用它,所以我留在工厂模式)。所以我用工厂模式解决了这个问题,并为我的Connection创建了一个界面,如下所示:
interface IConnection
{
string ConnectionString { get; set;}
IDbConnection CreateConnection { get; }
}
我使用IDbConnection
,因为主要的数据库提供商似乎已经实现了它。
我不确定我是否还需要其他任何东西。
在此之后我创建了我的Factory类,如下所示:
class clsFactoryDB
{
static public IConnection CreateDBConnection(int cChoice)
{
IConnection ObjSelector = null;
switch (cChoice)
{
case 1:
ObjSelector = new clsSQL();
break;
default:
ObjSelector = new clsSQL();
break;
}
return ObjSelector;
}
}
现在我刚刚定义了SQL,但MySQL或Oracle遵循相同的程序,所以我不会打扰我以后添加它。
最后我创建了我的IConnection
实现:
class clsSQL : IConnection
{
private DbConnection connection;
string IConnection.ConnectionString
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
IDbConnection IConnection.CreateConnection
{
get
{
if (connection == null)
{
connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerConnection"].ConnectionString);
}
return connection;
}
}
}
现在,在我的app.config中,我已经为{I}引用的所有连接字符串添加了一个属性。
ConfigurationManager
所以我的第一个问题是:我对这个概念的实施是正确的还是我错过了什么?为了做到这一点,我只关注了已经发布在这里的一些主题,我还读了一些关于代码项目但是他们的东西总是令人困惑。
现在我的困惑来自这样一个事实:为了使这项工作,连接字符串和提供者必须在app.config文件(或web.config for asp)中声明。但我并不总是连接到同一台服务器,因此我需要更改连接字符串(这就是我在<connectionStrings>
<add name ="SqlServerConnection" connectionString="SQL..." providerName="System.Data.SqlClient"/>
<add name ="MySqlServerConnection" connectionString="MySQL..." providerName="MySql.Data.MySqlClient"/>
//add more
</connectionStrings>
界面中添加ConnectionString
方法的原因。我对吗?因此,如果我理解正确,我现在可以通过根据需要更改连接字符串来连接到不同的数据库来操作任何带有ONE对象的数据库。
请更正我在这里可能犯的任何错误。谢谢。