使用多态来实现数据库之间的切换

1、一般数据库之间的转换时这样实现的 

         static void Main(string[] args){//必须引入System.Data程序集string connectionString = ConfigurationManager.ConnectionStrings["SqlConfigurationManager"].ConnectionString;string providerName = ConfigurationManager.ConnectionStrings["SqlConfigurationManager"].ProviderName;IDbConnection con;if (providerName == "Access"){con = new OleDbConnection(connectionString);}else if (providerName == "Sql"){con = new SqlConnection(connectionString);}else{throw new Exception("不存在!");}using (con){con.Open();using (IDbCommand cmd = con.CreateCommand()){cmd.CommandText = "insert into Person (age) values(@age) ";//Access占位符通常使用问号?,当多个占位符参数时,要注意个数,而如果使用的是@作为占位符的话,就必须要注意Command添加参数时的顺序,不然报错,而?问号不要在意这个顺序,所以推荐使用问号?作为占位符IDbDataParameter parameter = cmd.CreateParameter();parameter.ParameterName = "@age";parameter.DbType = DbType.Int32;parameter.Value = "110";cmd.Parameters.Add(parameter);cmd.ExecuteNonQuery();}}Console.WriteLine("插入成功!");Console.ReadKey();
}

 App.config配置如下

<configuration><connectionStrings><add name="SqlConfigurationManager" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb"   providerName="Access"/><!--<add name="SqlConfigurationManager" connectionString="Server=.;Database=Person;Integrated Security=True;Pooling=False"providerName="MsSqlServer"/>--></connectionStrings>
</configuration>

 2、通过DbProviderFactories实现

 一般providerName是有规范的命名的
在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config里面的system.data节点下定义了

<system.data><DbProviderFactories>
     <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
     <add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/><add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/></DbProviderFactories>
</system.data>

如果providerName为System.Data.Odbc,那么可以用于所有数据库配置
如果为System.Data.OleDb,可用于Access数据库配置
如果为System.Data.OracleClient,可用于Oracle数据库配置
如果为System.Data.SqlClient,可用于MsSqlServer数据库配置

        static void Main(string[] args){string connectionString = ConfigurationManager.ConnectionStrings["SqlConfigurationManager"].ConnectionString;string providerName = ConfigurationManager.ConnectionStrings["SqlConfigurationManager"].ProviderName;//必须引入System.Data程序集DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);using (DbConnection con = factory.CreateConnection()){con.ConnectionString = connectionString;con.Open();using (DbCommand cmd = factory.CreateCommand()){cmd.CommandText = "insert into Person (age) values(@age)";cmd.Connection = con;DbParameter parameter = cmd.CreateParameter();parameter.ParameterName = "@age";//Access不用此占位符(?)也能顺利插入parameter.DbType = DbType.Int32;parameter.Value = "1010";cmd.Parameters.Add(parameter);cmd.ExecuteNonQuery();}}Console.WriteLine("插入成功!");Console.ReadKey();}

注意ProviderName的配置

<configuration><connectionStrings><add name="SqlConfigurationManager" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb"providerName="System.Data.OleDb"/><!--<add name="SqlConfigurationManager" connectionString="Server=.;Database=Person;Integrated Security=True;Pooling=False"providerName="System.Data.SqlClient"/>--></connectionStrings>
</configuration>

 

转载于:https://www.cnblogs.com/MrZivChu/p/ChangeDataBase.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清华计算机网络所教授张,2019计算机考研清华大学计算机网络技术研究所简介...

2019考研复习正在紧张的进行中&#xff0c;为了更好的帮助同学们学习。新东方在线为大家整理了“2019计算机考研清华大学计算机网络技术研究所简介”的相关信息&#xff0c;提醒各位考生要合理安排复习时间&#xff0c;做好复习规划。希望对大家的复习有所帮助!计算机网络技术正…

[工具]iperf测试带宽

之前被要求测试网卡带宽能力&#xff0c;发现了iperf这个工具&#xff0c;记录下来防止遗忘。 iperf是个开源跨平台测试带宽工具&#xff0c;windows、linux、macOS……都支持&#xff0c;安装也挺方便。 1.安装 地址&#xff1a;https://iperf.fr/ 2.测试 参看&#xff1a;htt…

资料员计算机知识大全,最新资料员专业基础知识

资料员专业基础知识(一)建筑识图一、单选1、常用的A2工程图纸的规格是(420594)。2、1号图纸图符是(0)号图纸图幅的对裁。3、我国横式图纸会签栏通常处于(图框外左上角)。4、工程图中&#xff0c;若粗实线的线宽为3.0mm&#xff0c;则细实线的线宽一般为0.75 mm.5、比例是指(图形…

Android学习笔记----Java中的字符串比较

用习惯了C#、C&#xff0c;在做字符串比较时想当然地使用如下语句&#xff1a; 1 string str1 "abcd", str2 "abcd"; 2 if(str1str2) 3 { 4 return true; 5 } 6 else 7 { 8 return false; 9 } 殊不知在Java中&#xff0c;两个String类型的变量&a…

计算机能做什么英语对话,计算机英语会话∣实用电脑英语

原标题&#xff1a;计算机英语会话∣实用电脑英语Practical English for Computer实用电脑英语Key sentence必备表达All players must be ready for the game to start.所有玩家准备开始游戏。Are you sure you want to cancel your changes?你确认要取消改变吗&#xff1f;Ar…

配置Redis主从复制

[构建高性能数据库缓存之redis主从复制][http://database.51cto.com/art/201407/444555.htm] 一、什么是redis主从复制&#xff1f; 主从复制&#xff0c;当用户往Master端写入数据时&#xff0c;通过Redis Sync机制将数据文件发送至Slave&#xff0c;Slave也会执行相同的操作确…

html div bgcolor,HTML body bgcolor transparent

问题I have this HTMLstyle"margin:0px;padding:0px;"Here i have set bgcolor"#FFFFFF" but i want it to be transparent how to do it ?回答1:HTML provides no means to specify a transparent background (and the means it has to specify backgrou…

php内置函数

array_count_values() 函数用于统计数组中所有值出现的次数。转载于:https://www.cnblogs.com/tris/p/4616252.html

计算机主机外部的连接端口有何作用,微机原理 课后题 标准答案

4.11 ROM、PROM、EPROM分别用在什么场合&#xff1f;答&#xff1a;① ROM用在一个计算机系统完成开发以后&#xff0c;容纳不再修改的程序和数据。且批量产量要大的场合。② PROM用于非批量的场合。③ EPROM用于软件或系统的开发阶段及批量很小的场合。第五章 微型计算机和外设…

计算机对口升学试题英语,对口招生考试对口升学英语模拟试卷试题.docx

对口升学考试英语模拟试题第一卷英语知识运用一、语音知识&#xff1a;从 A,B,C,D 四个选项中找出一个与其他三个单词划线部分发音不同的选项。1.A. punishB. rushC. guestD. hundred2.A. graspedB. guidedC. handedD. planted3.A. schoolB. chemistryC. championD. stomach4.A…

计算机应用头部案例提交,基于头部位置的应用程序放置的制作方法

技术特征&#xff1a;1.一种电子设备&#xff0c;包括&#xff1a;一个或多个处理器&#xff1b;和存储器&#xff0c;所述存储器存储被配置为由所述一个或多个处理器执行的一个或多个程序&#xff0c;所述一个或多个程序包括用于执行以下操作的指令&#xff1a;在计算机生成的…

Maven学习总结(七)——eclipse中使用Maven创建Web项目

Maven学习总结(七)——eclipse中使用Maven创建Web项目 一、创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project&#xff0c;如下图所示&#xff1a; 在New窗口中选择 Maven -> Maven Project。点击【next】如下图所示&#xff1a; 1.2 选择项目路径 根…

notice

*****测量***** 转载于:https://www.cnblogs.com/mengfanrong/p/4622864.html

html文件用safari打开方式,在html中打开(在Safari中)

嗯&#xff0c;你说的是UIDocumentInteractionController那么。实施UIDocumentInteractionControllerDelegate在UIViewController- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller { return self;…

简单的Flash GUI工具(Simple Flash GUI Tool)

原文引用&#xff1a;http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool#more-1242 简单的Flash GUI工具 40 代码: 用最小的比较快AS3原型 更新:基思自己一直致力于类似的想法,并释放 MinimalConfigurator 。 基思彼得的 最小的组件 任何Flash…

计算机网络模拟校园,计算机网络课程设计-模拟校园网组网实验

计算机网络课程设计-模拟校园网组网实验 福建农林大学金山学院 信息工程类 课程实习报告 课程名称&#xff1a; 计算机网络 实习题目&#xff1a; 校园网组网方案 姓 名&#xff1a; 严夫 系&#xff1a; 信息与机电工程系 专 业&#xff1a; 计算机科学与技术 年 级&#xff1…

西南科技大学计算机综合大纲,2019年西南科技大学信息工程学院考研复试大纲...

2019年西南科技大学信息工程学院考研复试大纲一、《控制系统综合》考试说明1、《控制系统综合》&#xff0c;考核学生对控制类核心课程基本概念、基本原理、基本方法的理解&#xff0c;以及应用基础知识&#xff0c;分析或解决较为复杂的问题的水平;2、《控制系统综合》&#x…

设计模式综述

《java23种设计模式总结》http://blog.csdn.net/lc2470348636/article/details/8935758 《设计模式大集锦 程序员面试全攻略》http://www.csdn.net/article/2012-06-04/2806324-software-design-interview-questions 设计模式&#xff1a;构建OO系统的隐含经验。 特性&#xff…

计算机网络纳新水粉画,小学教育专业“书法诗画创作社团”顺利举办纳新活动...

原标题&#xff1a;小学教育专业“书法诗画创作社团”顺利举办纳新活动小学教育专业“书法诗画创作社团”顺利举办纳新活动为了丰富同学们的课余生活&#xff0c;向全校师生展现小学教育专业的风采&#xff0c;2018年10月21日上午9:30&#xff0c;隶属于小学教育专业的“书法诗…

理论物理极础3:动力学

莱尼&#xff1a;“乔治&#xff0c;物体咋会运动起来&#xff1f;” 乔治&#xff1a;“因为物体受力&#xff0c;莱尼。” 莱尼&#xff1a;“物体咋会又不动了&#xff1f;” 乔治&#xff1a;“还是因为物体受力&#xff0c;莱尼。” 亚里士多德运动定律 亚里士多德生活在一…