工厂模式连接数据库

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 在项目中通常可能会使用不同的数据源,可能是SQL Server也可能是ACCESS或者是Oracle,那么如何保证在使用不同数据源的时候,使项目代码更改的代价最小呢?对,使用工厂模式.

在项目中通常可能会使用不同的数据源,可能是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就可以使用不同的数据源,而且整个项目都不需要为不同的数据库而烦恼

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
SQL Oracle 关系型数据库
|
Java 数据库连接 数据库
|
机器学习/深度学习 Java 数据库连接
|
11月前
|
数据库
将连接数据库封装成类
在idea里将连接数据库封装成类
|
移动开发 前端开发 数据库连接
如何通过ADO接口连接数据库
如何通过ADO接口连接数据库
222 0
|
SQL Java 数据库连接
单例模式和JDBC
配置文件: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/blog user=root user=1234 properties文件里面通常存放的是Map,也就是键值对。
1132 0
|
SQL 存储 数据库
自己封装的MSSQL的数据库操作类
代码 /*  * 作者: 牛腩  * 创建时间: 2010-1-20 10:43:14  * Email: 164423073@qq.com  * 说明: 对MSSQL数据库的增删查改操作的封装类  */using System;using System.
660 0
|
SQL Java 数据库连接
简易高重用的jdbcutils工具封装实现类以及简易连接池实现
     由于现在发现做个小项目都是导入n多的依赖包,很烦琐,只想快点开发完一个个的小需求项目,这个时候真心不想用框架,只能自己写个jdbcutils,虽然网上有很多有apache的,阿里的,但是感觉用过后都不怎么顺手,然后自己花了点时间写个新的,不喜勿喷 1.
838 0