2009-04-27 7 views
8

꽤 간단한 질문입니다. SQL Server 2005 인스턴스에서 데이터를 읽는 앱을 만들고 있습니다. 필자는 랩탑 (SQL 2005는 없음)에서 일부 테스트를 실행하여 테스트 목적으로 로컬 데이터베이스를 교체하려고했습니다.SQLConnection을 사용하여 SQL CE db에 연결

Compact Edition DB가 자연스럽게 보일 수 있도록 VS2008을 사용하고 있습니다. 내 연결 문자열을 바꿀 뿐이었지만 SqlConnection이 아닌 SqlCeConnection을 사용하여 CE 데이터베이스에 연결할 수있게되었습니다. 이것 주위의 어떤 방법이든, 아마도 연결 문자열에서 사용할 수있는 수정 자일까요?

답변

7

그것은 단지 수정 구성 매개 변수에 의해 실제로 사용자의 SQL CE 대신 본격적인 SQL 서버에 매우 가능 : 변경 연결 문자열이 가능한 대신 플랫폼 별 SqlXXXSqlCeXXX 사람의 IDbXXX 가족 인터페이스를 사용합니다. DbProviderFactories을 참조하십시오.

그러나이 두 플랫폼의 SQL 언어의 차이점에 유의하십시오.

+0

정확히 내가 감사를 찾고 있었습니까. 치료를합니다. – TygerKrash

+1

"방언의 차이"를 강조하는 좋은 링크를 알고 있습니까? SQL Server에 지원되지 않는 주요한 것들을 나열한 페이지가 있다면 정말 유용 할 것입니다. – noelicus

1

DB에 필요한 모든 SQL 관련 객체는 기본 추상 Db ... (즉 DbConnection, DbDataAdapter 등)에서 상속합니다. 따라서 인스턴스화 될 때 Sql 또는 Sql Ce를 다루는지를 알아야하는 일종의 DatabaseManager 클래스를 작성할 수 있습니다. 그런 다음 그 시점부터 기본 클래스 개체 (DbConnection 등) 만 처리하면됩니다. 그렇게하면 매번 변경해야하는 것은 관리자 클래스의 인스턴스 생성입니다.

이렇게하면 나중에 다른 공급자로 전환하기로 결정할 때 많은 코드를 변경해야하는 경우가 있습니다.

4

예, 대신 기본 클래스를 참조하여 SQL Compact 및/또는 SQL Server를 사용할 수 있습니다. 예를 들어 : "Data Source=urData.sdf;Persist Security Info=False;" :

IDbConnection Connection; 

if (Compact) 
    Connection = new SqlCeConnection(); 
else 
    Connection = new SqlConnection(); 

연결 문자열은 예를 들어, SQL 컴팩트에 대한 데이터 파일을 가리 키도록해야합니다. 더 examples here.

이 링크는 무엇이 동일하지 않은지 differences there are between SQL Server and SQL Compact을 설명합니다.

+0

방언의 차이점에 대한 추가 정보를 제공해 주셔서 감사합니다. 나는 예제 코드가 작동 할 것이라고 생각하지만 명시 적 클래스 참조를 피하고 DbProvider 팩토리를 사용하고 대신 구성을 사용하여 연결 유형을 관리하는 것과 같이 명확한 (명확성 CE 연결 유형이 필요함)). – TygerKrash