2013-01-03 3 views
1

사용자가 SQL Server CE 또는 SQL Server Express 데이터베이스를 백그라운드로 선택하도록하는 응용 프로그램을 작성하고 있습니다. 그러나 이들은 별도의 참조 및 별도의 방법을 사용합니다. SQL Server Express 및 SQL Server CE 사용

이 일의 적절한 .NET 방법이 있습니까, 아니면 사용자 환경 설정을 저장하고 사용하는 경우 다음과 같은 데이터베이스 유형을 확인하는 전체 프로그램 전반에 걸쳐 문 :

if (Properties.Settings.Default.dbType == 1) 
{ SqlConnection blah = new SqlConnection} 
else if (Properties.Settings.Default.dbType == 2) 
{ SqlCEConnection blah = new SqlCEConnection} 

이, 그것은 단지를 작동 더 좋은 방법이 있어야합니다.

답변

2

SqlConnection과 SqlCEConnection은 모두 System.Data.Common.DbConnection을 확장하므로 "blah"를 DbConnection로 선언하면 동일한 메서드와 속성을 사용할 수 있습니다.

실제로 올바른 연결 유형을 만들려면 System.Data.Common.DbProviderFactories 및 System.Data.Common.DbProviderFactory 클래스를 사용하십시오. 예를 들어 :

DbProviderFactory providerFactory = DbProviderFactories.GetFactory("The Provider Name"); 

using (DbConnection connection = providerFactory.CreateConnection()) 
{ 
    connection.ConnectionString = "The Connection String"; 

    connection.Open(); 

    // Use the "connection" object here 
} 

는 "공급자 이름"를 들어, 데이터베이스 유형에 따라 "의 System.Data.SQLClient"또는 "System.Data.SqlServerCe를"중 하나에 넣어 것입니다. 그런 다음 "연결 문자열"에 대해 공급자 유형에 대한 올바른 연결 문자열을 넣습니다.

편집 :이 기술은 App.config 파일과 System.Configuration.ConfigurationManager 클래스에서 잘 작동합니다. 예를 들어, app.config 파일은 다음과 같습니다 경우 :

<?xml version="1.0" encoding="utf-8"?> 

<configuration> 
    <connectionStrings> 
     <add name="TheConnectionString" providerName="System.Data.SqlClient" connectionString="Blah Blah Blah" /> 
    </connectionStrings> 
</configuration> 

그런 다음 다음과 같이 이러한 구성 설정에 액세스 할 수 있습니다 :

DbProviderFactory providerFactory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["TheConnectionString"].ProviderName); 

using (DbConnection connection = providerFactory.CreateConnection()) 
{ 
    connection.ConnectionString = ConfigurationManager.ConnectionStrings["TheConnectionString"].ConnectionString; 

    connection.Open(); 

    // Use the "connection" object here 
}