假设我正在使用许多sql连接对象。一些连接我的本地数据库,一些连接我的远程数据库等
public static T GetGenericConnection<T>()
{
}
所以我想调用类似GetGenericConnection<DBLocal>() or GetGenericConnection<DBRemote>()
的函数,然后GetGenericConnection
将基于传递值将sql连接对象作为T返回。传递值意味着很少有类名DBLocal or DBRemote
或者我会调用类似GetGenericConnection<ConnectionType.DBLocal>() or GetGenericConnection<ConnectionType.DBRemote>()
的函数。
ConnectionType.DBLocal
是枚举类型。
GetGenericConnection
函数将根据传递值将DBLocal or DBRemote
实例作为类型T返回。
请告诉我如何使用示例代码实现此目的。感谢
public static T GetGenericConnection<T>(ConnectionType ConnectionFor)
{
if (ConnectionFor == ConnectionType.LocalSQLConnection)
return (T)Convert.ChangeType((new BBASQLLocalConnection()).Connection, typeof(T));
else if (ConnectionFor == ConnectionType.ORCSWEBSQLConnection)
return (T)Convert.ChangeType((new BBAORCSSQLConnection()).Connection, typeof(T));
else if (ConnectionFor == ConnectionType.ReportConnection)
return (T)Convert.ChangeType((new BBASQLReportConnection()).Connection, typeof(T));
else
return (T)Convert.ChangeType((new BBASAGEConnection()).Connection, typeof(T));
}
当我以这种方式调用函数时会发生某种问题
SqlConnection conn1 = (SqlConnection) ConnectionManager.Factory.BBADBConnectionFactory.GetGenericConnection<BBASQLLocalConnection>(ConnectionType.LocalSQLConnection);
错误讯息是
无法转换类型&#39; ConnectionManager.BBASQLLocalConnection&#39;至 &#39; System.Data.SqlClient.SqlConnection
答案 0 :(得分:1)
您不需要通用类型参数。只需一个常规参数即可:
public static IDbConnection GetDatabaseConnection(ConnectionType db)
{
switch (db)
{
case ConnectionType.DBLocal:
return new SqlConnection("dblocal connection string here");
break;
case ConnectionType.DBRemote:
return new SqlConnection("db remote connection string here");
break;
default:
throw new InvalidArgumentException("Unrecognized DB Type");
break;
}
}
好的,根据您的更新,我看到了您的问题的更多内容;你有连接类型的包装器对象。我在这里建议的仍然是正确的方法。问题编辑的变化是您还需要确保您的特殊连接包装类型都实现了一个通用接口。