工厂模式连接数据库

本文涉及的产品
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
目录
相关文章
|
6月前
|
SQL Java 数据库连接
数据库访问: JDBC是什么,如何使用它连接数据库?
JDBC是Java访问关系数据库的标准API,包含一组Java类和接口,如java.sql和javax.sql。要连接数据库,需先下载相应JDBC驱动,然后使用DriverManager.getConnection()方法。以下是一个连接MySQL数据库的示例代码片段,展示如何加载驱动、建立连接并关闭连接。注意替换代码中的数据库URL、用户名和密码。
42 3
|
6月前
|
数据库
将连接数据库封装成类
在idea里将连接数据库封装成类
|
Java 数据库连接 数据库
手写数据库连接池,让抽象工厂不再抽象
在讲解抽象工厂之前,我们要了解两个概念:产品等级结构和产品族,如下图所示。
69 0
Servlet使用适配器模式进行增删改查案例(jdbc.properties)
Servlet使用适配器模式进行增删改查案例(jdbc.properties)
|
设计模式 Java uml
工厂模式大解析
对简单工厂模式以及抽象工厂模式进行详细解析,帮助读者更好地理解工厂模式
169 0
工厂模式大解析
|
Java 数据库连接 数据库
JDBC学习(一):连接数据库的几种方法
JDBC学习(一):连接数据库的几种方法
160 0
|
Java 大数据 数据库连接
模板方法模式实现封装jdbc
模板方法模式实现封装jdbc
模板方法模式实现封装jdbc
|
SQL 网络安全 PHP
封装数据库操作类(构造方法)|学习笔记
快速学习封装数据库操作类(构造方法)
|
PHP 数据库
PHP面试题:单例模式,创建mysqli数据库链接的单例对象
PHP面试题:单例模式,创建mysqli数据库链接的单例对象
229 0
|
移动开发 前端开发 数据库连接
如何通过ADO接口连接数据库
如何通过ADO接口连接数据库
193 0
下一篇
无影云桌面