使用 Enterprise Library (2006年1月版) 只改设置文件切换数据库
先说功能代码部分,有以下代码:
Database db = DatabaseFactory.CreateDatabase();
string strSQL = " SELECT id, name FROM t_001 WHERE (id IN (6, 7, 9, 8)) ";
DataSet ds = db.ExecuteDataSet(CommandType.Text, strSQL);
this.dataGridView1.DataSource = ds.Tables[0];
代码很简单,就是从数据库中读取数据,然后展示在 DataGridView 控件中。
首先来看简单的切换
Access 数据库和 SQL Server 数据库。
使用 Sql Express 2005 的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
</configSections>
<dataConfiguration defaultDatabase="MyTestConnectionString" />
<connectionStrings>
<add name="MyTestConnectionString" connectionString="server=(local)/SQLEXPRESS;database=EntLibQuickStarts;Integrated Security=true;"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
使用 Access 数据库 的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
</configSections>
<dataConfiguration defaultDatabase="MyTestConnectionString" />
<connectionStrings>
<add name="MyTestConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/My2005Codes/TestCode/AccessDB.mdb;"
providerName="System.Data.OleDb" />
</connectionStrings>
</configuration>
说明:
上述两者只对链接字符串的 providerName 、connectionString 发生了变化,就可以自动切换数据库。
下面再复杂点,假设我们有个冷门的数据库链接提供程序,比如DB2等。由于不容易找到模拟环境,
我们下面演示的是给 System.Data.OleDb 数库提供程序起个另外的别名 MyOleDBDatabase ,然后调用这个别名 MyOleDBDatabase。
实际这些冷门的数据库提供程序,跟这的配置方法是一样的。
配置文件如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
</configSections>
<dataConfiguration defaultDatabase="MyTestConnectionString" />
<connectionStrings>
<add name="MyTestConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/My2005Codes/TestCode/AccessDB.mdb;"
providerName="MyOleDBDatabase" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<add name="my Generic Database" invariant="MyOleDBDatabase" description="An alias for the OleDBProvider" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</DbProviderFactories>
</system.data>
</configuration>
以上只是简单的给了几个配置文件的范例,仅供参考。
注意:
Database db = DatabaseFactory.CreateDatabase();
这行代码返回的 Database 类型的 db,实际的类型,是不一样的。
在 2006年1月份的 Enterprise Library 中,提供了 3个
派生自 Microsoft.Practices.EnterpriseLibrary.Data.Database 的类,依次是:
Microsoft.Practices.EnterpriseLibrary.Data.GenericDatabase
Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase
Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase
上述三个配置文件中,返回的 db 虽然都是 Database 父类,但是子类是不一样的。
链接到 Sql Express 2005 的 这个配置文件, 返回的 db 其实是 SqlDatabase 类型
其他两个返回的是 GenericDatabase 类型。