2013-01-03 167 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 
}