工厂模式连接数据库

在项目中通常可能会使用不同的数据源,可能是SQL Server也可能是ACCESS或者是Oracle,那么如何保证在使用不同数据源的时候,使项目代码更改的代价最小呢?
对,使用工厂模式.在Net1.1的时候,这需要项目实施者自己来完成.在Net2.0中,MS已经新增了几个用于实施工厂模式的类库.
首先我现在应用程序当前目录下新建Databases目录,再新建一个Access数据库与Sqlserver数据库
其中这2个数据库的结构都是一样的,都包含一个SampleData表,有ID,与IntegerValue字段

然后回到VS中新建一个WinForm项目,然后编辑App.Config文件如下:

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

configuration>
   
connectionStrings>
   

       
<add name="SQL Server" providerName="System.Data.SqlClient"       
          connectionString
="Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/Databases/MyData.mdf;Integrated Security=True;User Instance=True" />
       
<add name="MS Access" providerName="System.Data.OleDb"
          connectionString
="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/Databases/MyData.mdb;Persist Security Info=True" />   
   
connectionStrings>

configuration>

然后在主窗体中的Button事件中编写如下代码

private void getDataButton_Click(object sender, EventArgs e)
        {
           
try
            {
               
//创建一个新的StopWatch来监视连接性能[Net2.0新增]
                Stopwatch myWatch = new Stopwatch();

               
// 开始计算connection and retrieval of data所花费的时间
                myWatch.Start();

               
// 选择要使用的数据源
                string strDataSource="MS Access";

               
// 根据选者的数据源获得连接字符串的配置对象               
                ConnectionStringSettings objConnectionSettings = ConfigurationManager.ConnectionStrings[strDataSource];

               
// 通过配置文件创建数据库驱动工厂的实例
                DbProviderFactory objProviderFactory = DbProviderFactories.GetFactory(objConnectionSettings.ProviderName);

               
// 通过数据库驱动工厂创建DBConnection实例
                using (DbConnection objConnection = objProviderFactory.CreateConnection())
                {
               
               
// 从 objConnectionSettings 中获取连接字符串
                objConnection.ConnectionString = objConnectionSettings.ConnectionString;

               
// 打开 connection
                objConnection.Open();

               
// 通过数据驱动工厂创建 数据适配器和 Command
                DbDataAdapter myAdapter = objProviderFactory.CreateDataAdapter();
                DbCommand myCommand
= objProviderFactory.CreateCommand();
               
           
               
string myQuery = "SELECT * FROM SampleData";
                DataSet myDataSet
= new DataSet();

                myCommand.Connection
= objConnection;
                myCommand.CommandText
= myQuery;

                myAdapter.SelectCommand
= myCommand;

                myAdapter.Fill(myDataSet);
               
                displayDataGridView.DataSource
= myDataSet.Tables[0];

               
// 停止StopWatch来查看连接和返回数据所花费的时间
                myWatch.Stop();
                elapsedTimeTextLabel.Text
= "消耗时间: " +  myWatch.ElapsedMilliseconds.ToString() + " ms";
                providerLabel.Text
= "数据驱动: " + objConnectionSettings.ProviderName.ToString();
                connectionStringLabel.Text
= objConnectionSettings.ConnectionString.ToString();
            }
            }
           
catch
            {
                MessageBox.Show(
"出现错误.", "Alert");
            }
           
        }
    }

这样,只需要更改strDataSource就可以使用不同的数据源,而且整个项目都不需要为不同的数据库而烦恼

上一篇:服务网关 Spring Cloud Gateway 的应用


下一篇:Docker安装gitlab-runner 并注册