首先是配置文件:其中的providerName就是指定的不同数据库类型
<connectionStrings>
<add name="..." connectionString=" ..." providerName="System.Data.OleDb" />
<add name="..." connectionString=" ..." providerName="System.Data.SqlClient" />
</connectionStrings>
下面看一下使用工厂的这个类:
class DataBaseFac
{
private DbConnection cnn;//抽象类型
private DbCommand cmd;//抽象类型
private DbProviderFactory provider;
public DataBaseFac()
{
//从配置文件中取出标示数据库类型的字符串
string providerName = ConfigurationManager.ConnectionStrings[1].ProviderName;
//根据上一部的结果工厂创建一个对应的实例
provider = DbProviderFactories.GetFactory(providerName);
//使用该实例就可以创建对应的connection,command 和adapater对象了
//调试的时候可以看到这几个对象都变成了相应于数据库类型的
cnn = provider.CreateConnection();
cnn.ConnectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
cmd = provider.CreateCommand();
cmd.Connection = cnn;
}
//执行一次查询,返回数据表
public DataTable ExcuteQuery(string queryString)
{
DataTable result = new DataTable();
DbDataAdapter adapter = provider.CreateDataAdapter();
cmd.CommandType = CommandType.Text;
cmd.CommandText = queryString;
adapter.SelectCommand = cmd;
try
{
cnn.Open();
adapter.Fill(result);
}
catch
{
result = null;
}
finally
{
cnn.Close();
}
return result;
}
以上只是简单的应用,并没有做比较高级的封装,只供不知道的兄弟参考。
顺便说说,上午看到那个兄弟的文章用swith case语句来实现