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