我目前正在创建一个支持MySQL和MSSQL数据库的C#应用程序。我遇到的问题是用我的包装。我有我的代码为MySQL工作,但我有问题修改它以支持多个数据库。C#DB Wrapper支持多个数据库
如果你看看我的代码的精简版本,你会看到我有一个DBMySQL类型的dbConn对象,如果我只想要MySQL支持,那很好。我需要将DBMySQL修改为通用的,以便我可以运行dbConn = new DBMySQL(...)和dbConn = DBMSSQL(...),然后我可以简单地调用dbConn.SomeMethod()并使其在适当的数据库上工作。我宁愿尽可能保持相同的设置,因为我的DBMySQL和DBMSSQL类中有其他的东西,用于批量插入数据库和进行特定的错误检查。
我在想/试图声明一些类似于Object dbConn的东西,然后操纵它,但那并没有那么好。然后我尝试使用对象类型的枚举类,但是我也遇到了问题。我知道有很多第三方库可以完成所有这些工作,但我更愿意使用自己的代码。
有没有人有任何建议,我可能会修改我的DBWrapper来解决这个问题?
//WRAPPER CLASS THAT CALLS DBMySQL, ISSUE IS I NOW NEED TO SUPPORT
//DBMSSQL as well, not just DBMySQL
class DBWrapper
{
DBMySQL dbConn;
public DBWrapper(...,string type)
{
if(type.Equals("MySQL")
{
dbConn = new DBMySQL(...);
}
//NEED TO REWORK TO SUPPORT THIS BELOW!!
else if(type.Equals("MSSQL")
{
//NEED TO MODIFY TO SUPPORT MSSQL
//ISSUE IS DbConn is of type DBMySQL
//SO I CANNOT GO
// DbConn = new DBMSSQL(...);
// any ideas?
}
}
public void setQuery(string myquery)
{
dbConn.setQuery(myquery);
}
}
class DBMySQL
{
public string dbinfo;
string query;
public DBMySQL(...)
{
dbinfo = ...;
}
public void setQuery(...)
{
query = myquery;
}
}
//NEED TO RE-WORK WRAPPER TO SUPPORT THIS
class DBMSSQL
{
public string dbinfo;
string query;
public DBMSSQL(...)
{
dbinfo = ...;
}
public void setQuery(...)
{
query = myquery;
}
}
在这一点上,我希望得到任何帮助可言,因此,如果您正在查看这篇文章,有一个想法,请让我知道,我已经花了一整天在此。
这个问题可以使用工厂方法设计模式来解决,看看[这里](http://en.wikipedia.org/wiki/Factory_method_pattern) – sll