我目前正在创建一个支持MySQL和MSSQL数据库的C#应用程序.我遇到的问题是我的包装器.我的代码适用于MySQL,但我在修改它以支持多个数据库时遇到问题.
如果你看一下我的代码的精简版本,你会看到我有一个DBMySQL类型的dbConn对象,如果我只想要MySQL支持,这很好.我需要修改DBMySQL是通用的,这样我就可以运行dbConn = new DBMySQL(...)和dbConn = DBMSSQL(...)然后我可以简单地调用dbConn.SomeMethod()并让它在相应的数据库上运行.我希望尽可能保持相同的设置,因为我在DBMySQL和DBMSSQL类中有其他东西用于批量插入数据库和特定的错误检查.
我在想/尝试声明像对象dbConn之类的东西,然后操纵它,但这并不是那么顺利.然后我尝试使用enum类的对象类型,但我也遇到了问题.我知道有很多第三方库可以完成所有这些,但我更喜欢使用自己的代码.
有没有人有任何建议我如何修改我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
在这一点上,我会感激任何帮助,所以如果你正在查看这篇文章并有一个想法,请告诉我,因为我已经花了一整天的时间.
您需要的是创建界面,该界面将描述您希望数据访问类执行的操作.
例如,你的样本
public interface IDBAccess
{
void setQuery(...);
}
public class DBMySQL : IDBAccess
{
public string dbinfo;
string query;
public DBMySQL(...)
{
dbinfo = ...;
}
public void setQuery(...)
{
query = myquery;
}
}
public class DBMSSQL : IDBAccess
{
public string dbinfo;
string query;
public DBMSSQL(...)
{
dbinfo = ...;
}
public void setQuery(...)
{
query = myquery;
}
}
Run Code Online (Sandbox Code Playgroud)
此时您将能够执行此操作:
IDBAccess dbConn;
dbConn = new DBMySQL();
dbConn = new DBMSSQL();
Run Code Online (Sandbox Code Playgroud)
考虑到您对此不熟悉,建议您查看NHibernate或Castle ActiveRecord和Castle Windsor可能没有用.但是为了将来要记住它们.
| 归档时间: |
|
| 查看次数: |
2833 次 |
| 最近记录: |