UPD: У меня есть статический класс для работы с базой данных.C# метод возвращает подключение к различным базам данных
Этот класс содержит метод, который возвращает соединение с базой данных. Ранний этот метод возвращает соединение с базой данных Advantage (AdsConnection):
static private AdsConnection GetConnection(){
var conn = new AdsConnection();
conn.ConnectionString = here my connection string
return conn;
}
Теперь мне нужно изменить этот метод. Мне нужно, чтобы этот метод возвращал соединение с различными типами баз данных (база данных Advantage, база данных Oracle).
Метод будет работать в общедоступных методах в моем классе. Например, метод для получения данных из любой таблицы из базы данных.
public static List<entity1> GetEntities(){}
В этом методе первым из моих шагов является разрешение типа базы данных, а затем подключение к базе данных. Затем получите данные из базы данных, а последний шаг - данные возврата (список < entity1>).
На этапе подключения к базе данных, что нужно использовать метод GetConnection("Ads")
Этот метод возвращает текущее подключение к базе данных, а затем я могу использовать это подключить к работе
Я изменил метод:
Моя первая версия
static private T GetConnection<T>(string dbType)
{
if (dbType.Equals("Oracle"))
{
OdbcConnection conn = new OdbcConnection
conn.ConnectionString = here my connection string
return (T)conn;
}
if (dbType.Equals("Ads"))
{
AdsConnection conn = new AdsConnection
conn.ConnectionString = here my connection string
return (T)conn;
}
return default(T);
}
Но, мое решение не Работа. У меня есть ошибки:
- Невозможно преобразовать тип «System.Data.Odbc.OdbcConnection» в «T»
- Невозможно преобразовать тип «Advantage.Data.Provider.AdsConnection» в «T» я не знаю как решить мою проблему.
Скажите, пожалуйста, как решить мою проблему?
Теперь я использую следующий код (это решение дать мне @khlr):
static private IDbConnection GetConnection(string dbType)
{
if (dbType.Equals("Oracle"))
{
OdbcConnection conn = new OdbcConnection
conn.ConnectionString = here my connection string
return conn;
}
if (dbType.Equals("Ads"))
{
AdsConnection conn = new AdsConnection
conn.ConnectionString = here my connection string
return conn;
}
return null;
}
благодарственное.
Я думаю, вам нужно перечитать свой код. Прямо сейчас с текущим (неправильным) синтаксисом, который я мог бы сделать (если мы забудем об этих синтаксических ошибках в течение 5 минут): 'GetConnection (« Oracle »)'. –
User999999
Большинство клиентов Db для .net реализует IDbConnection. Таким образом, вы можете иметь IDbConnection как возвращаемый тип. Не обязательно быть общим типом – qamar
Я лично рекомендовал бы использовать совершенно другой подход. Вместо того, чтобы создавать эту генерализованную фабрику соединений, почему бы не позволить потребительскому коду просто создавать собственные соединения в простом блоке 'using'? Держите область действия/время жизни маленьким, а не глобальным. – David