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(){}
이 방법으로 첫 번째 단계는 데이터베이스 유형을 확인한 다음 데이터베이스에 연결하는 것입니다. 그런 다음 데이터베이스에서 데이터를 가져오고 마지막 단계는 데이터를 반환합니다 (List < 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);
}
하지만, 내 솔루션은하지 않습니다 작업. 나는 오류가 :
- 'T'는 가 유형 'Advantage.Data.Provider.AdsConnection을'변환 할 수 없습니다하는 'T' 모르겠어요
- 에 유형 'System.Data.Odbc.OdbcConnection을'변환 할 수 없습니다 내 문제를 해결하는 방법.
문제를 해결하는 방법을 알려주십시오.
지금, 나는 다음과 같은 코드를 사용 (이 솔루션은 나를 @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;
}
감사합니다. 모두 연결이 IDbConnection
에서 상속 이후
나는 당신이 당신의 코드를 다시 읽을 필요가 있다고 생각합니다. 현재 현재 (틀린) 구문을 사용하면 (5 분 동안 구문 오류를 잊어 버리면) 할 수 있습니다. GetConnection ("Oracle")'. –
User999999
.net 용 Db 클라이언트의 대부분은 IDbConnection에서 구현됩니다. 따라서 리턴 유형으로 IDbConnection을 사용할 수 있습니다. 꼭 필요하지는 않습니다. 일반 유형 – qamar
전적으로 다른 접근 방식을 권장합니다. 이 일반화 된 연결 팩토리를 만드는 대신 코드를 사용하면 간단한 'using'블록에서 자체 연결을 인스턴스화하는 것이 어떨까요? 연결 범위/수명은 전체가 아닌 작게 유지하십시오. – David