c#:通过泛型使用返回基于T类型的动态sql连接
本文关键字:类型 动态 连接 sql 返回 泛型 | 更新日期: 2023-09-27 18:15:20
假设我正在处理许多SQL连接对象。有些连接我的本地数据库,有些连接我的远程数据库等
public static T GetGenericConnection<T>()
{
}
所以我想调用像GetGenericConnection<DBLocal>() or GetGenericConnection<DBRemote>()
这样的函数,然后GetGenericConnection
将根据传递值返回sql连接对象作为T。pass值表示类名少如DBLocal or DBRemote
或我将调用函数像GetGenericConnection<ConnectionType.DBLocal>() or GetGenericConnection<ConnectionType.DBRemote>()
。
ConnectionType.DBLocal
是enum类型。
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);
Error message was
无法转换类型"ConnectionManager"。BBASQLLocalConnection"System.Data.SqlClient.SqlConnection
对此不需要泛型类型参数。只需一个常规参数即可:
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;
}
}
好吧,根据你的更新,我看到更多你的问题是什么;您有用于连接类型的包装器对象。我在这里建议的仍然是正确的方法。问题编辑的变化是,您还需要确保您的特殊连接包装器类型都实现一个公共接口。