1

나는 두 개의 서로 다른 데이터베이스를 처리 할 수있는 윈도우 CE 5.0에서 컴팩트 프레임 워크 3.5이 코드 조각을 쓰고 있어요 :도록 SqlConnection DBConnection 윈도우 CE

using System.Data; 
using System.Data.SqlClient; 
using System.Data.SqlServerCe; 
using System.Data.Common; 

public myClass 
{ 
    private DbConnection dbCn; 
    private DbCommand dbCmd; 
    public void myClass(bool ce) 
    { 
     if (ce) 
     { 
      dbCn = new SqlCeConnection(); 
      dbCmd = new SqlCeCommand(); 
     } 
     else 
     { 
      dbCn = new SqlConnection(); // COMPILER ERROR Cannot implicitly convert type 'System.Data.SqlClient.SqlConnection' to 'System.Data.Common.DbConnection' 
      dbCmd = new SqlCommand();// COMPILER ERROR Cannot implicitly convert type 'System.Data.SqlClient.SqlCommand' to 'System.Data.Common.DbCommand' 
     } 
    } 

이 DbXX에 SqlXX을 변환 할 수 없습니다 왜 ??? MSDN에서 SqlXX는 DbXX의 자식입니다! Btw, SqlCeXX에 문제 없습니다. cf에서 누락 된 DbPoviderfactory를 사용할 수 없습니다. 당신이 뭘 하려는지

감사

답변

1

Covariance and Contravariance in Generics이지만, 그 .NET 4.0까지 나오지 않았다.

[업데이트] 마이크로 소프트가 간단한 캐스트를 허용하지 않도록 [DbConnection]에서 [SqlConnection]에 캐스팅하는 몇 가지 매개 변수를 생략 할 수 있음을 나타납니다. 당신이 정말로 그것을 완수하려면

는, 코딩하는 방법 좋은으로 SO에이 스레드를 체크 아웃 :

C# DbConnection cast to SqlConnection

+0

죄송합니다 이해가 안,도록 SqlConnection이 DbConnection에서 상속 왜 '수 t write : DbConnection dbCn = new SqlConnection() ??????? – Beorne

+0

죄송합니다. 이제는 컴파일러가 올바른 객체가 무엇인지를 컴파일 타임에 알 수 없다는 것을 이해했습니다. desired 결과 (즉, DbPoviderfactory와 같은 것)를 얻기위한 아이디어가 있습니까? 감사. – Beorne

+0

IDbConnection과 같은 인터페이스를 사용하는 것이 좋습니다. – Beorne