成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ADO.NET開發數據庫無關性應用程序

開發 后端
今天我們要講的是ADO.NET開發數據庫無關性應用程序,數據庫無關性(DB Independ),指應用程序運行不依賴于某一數據庫(如SQL Server),能夠簡單切換至其它數據庫。

  數據庫無關性(DB Independ),指應用程序運行不依賴于某一數據庫(如 SqlServer),能夠簡單(不再編譯)切換至其它數據庫(如 Oracle)。數據庫無關性是衡量系統的一個指標。

  實現數據庫無關的應用程序有很多種方式,可采用 NHibernate、EntityFramework 等。

  本文介紹最基本的一種方式,下面一步步完成一個簡單的數據庫無關的小程序。

  新建項目

  在Visual Studio中新建 Console Application:

  (VS 2010 可以選擇不同的 .net 版本,如上選擇的是 2.0,也可以選擇其它版本,對本示例影響不大)

  項目創建完成后,如下添加對 System.Configuration 的引用:

再給項目添加一個配置文件:

項目準備完畢,結構如下:

  (不知道為什么,System.configuration 中的 configuration 的***個字母成了小寫)

  在配置文件中添加連接字符串

  1.   <?xml version="1.0"encoding="utf-8"?> 
  2.   <configuration> 
  3.   <connectionStrings> 
  4.   <add name="default" 
  5. connectionString="server=localhost; 
  6. user id=sa; password=******; database=northwind" 
  7. providerName="System.Data.SqlClient"/>  
  8. connectionString="server=localhost; 
  9. user id=sa; password=******; database=northwind" 
  10.   providerName="System.Data.SqlClient"/>  
  11. connectionString="server=localhost; 
  12. user id=sa; password=******; database=northwind" 
  13.   providerName="System.Data.SqlClient"/> 
  14.   </connectionStrings> 
  15.   </configuration> 

  注意,上面把連接字符寫在 connectionStrings 節中。不可寫在 appSettings 中,因為程序中要用到 providerName 這個屬性。

  編寫數據庫無關的代碼

  在 Program.cs 中引用如下三個命名空間:

  1.   using System.Data;  
  2.   usingSystem.Data.Common;  
  3.   usingSystem.Configuration; 

  首先要把配置文件中的連接字符串信息讀出來:

  1. ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["default"]; 

  ADO.NET 的數據無關使用了工廠模式,根據配置中的 providerName 可以獲取到這個工廠:

 

  1. DbProviderFactory factory = DbProviderFactories.GetFactory(settings.ProviderName); 

  DbProviderFactory 提供了多個方法,幫助我們創建訪問數據庫如需的對象:

  1.    public abstract class DbProviderFactory  
  2.   {  
  3.   //...  
  4.   publicvirtualDbCommand CreateCommand();  
  5.   publicvirtualDbCommandBuilder CreateCommandBuilder();  
  6.   publicvirtualDbConnection CreateConnection();  
  7.   publicvirtualDbConnectionStringBuilder CreateConnectionStringBuilder();  
  8.   publicvirtualDbDataAdapter CreateDataAdapter();  
  9.   publicvirtualDbDataSourceEnumerator CreateDataSourceEnumerator();  
  10.   publicvirtualDbParameter CreateParameter();  
  11.  } 

  DbConnection、DbCommand、DbDataAdapter、DbParameter 等都是數據庫無關的。

  下面這幾個小例子演示了這些對象的使用:

  1. 查詢員工數量

  1.   using (DbConnection connection = factory.CreateConnection())  
  2.   {  
  3.   connection.ConnectionString = settings.ConnectionString;  
  4.   DbCommand command = connection.CreateCommand();  
  5.   command.CommandType = CommandType.Text;  
  6.   command.CommandText = "select count(*) from employees";  
  7.   connection.Open();  
  8.   varobj = command.ExecuteScalar();  
  9.   if(obj isint) employeesCount = (int)obj;  
  10.   elseemployeesCount = (long)obj;  
  11.   connection.Close();  
  12.   }  
  13.   Console.WriteLine("共有員工 {0} 人", employeesCount); 

  count(*) 不同數據庫返回值類型不同(SqlServer 返回 Int32,MySql 返回 Int64),10~12行進行了處理。

  2. 使用 DbDataReader

  1.   using (DbConnection connection = factory.CreateConnection())  
  2.   {  
  3.   connection.ConnectionString = settings.ConnectionString;  
  4.   DbCommand command = connection.CreateCommand();  
  5.   command.CommandType = CommandType.Text;  
  6.   command.CommandText = "select * from employees";  
  7.   connection.Open();  
  8.   DbDataReader reader = command.ExecuteReader();  
  9.   while(reader.Read())  
  10.   Console.WriteLine("{0} {1}", reader["FirstName"], reader["LastName"]);  
  11.   connection.Close();  
  12.   } 

  3. 填充 Dataset

  1.   DataSet dataSet = newDataSet();  
  2.   using(DbConnection connection = factory.CreateConnection())  
  3.   {  
  4.   connection.ConnectionString = settings.ConnectionString;  
  5.   DbCommand command = connection.CreateCommand();  
  6.   command.CommandType = CommandType.Text;  
  7.   command.CommandText = "select * from employees";  
  8.   DbDataAdapter adapter = factory.CreateDataAdapter();  
  9.   adapter.SelectCommand = command;  
  10.   connection.Open();  
  11.   adapter.Fill(dataSet, "Employees");  
  12.   connection.Close();  
  13.   } 

  切換數據庫

  簡單修改配置文件,即可換用其它數據庫,如下使用 MySql:

  1.   <?xml version="1.0"encoding="utf-8"?>  
  2.   <configuration>  
  3.   <connectionStrings>  
  4.   <add name="default" 
  5. connectionString="server=localhost; user id=root; password=******; database=northwind" 
  6. providerName="MySql.Data.MySqlClient"/>  connectionString="server=localhost; user id=root; password=******; database=northwind" 
  7.   providerName="MySql.Data.MySqlClient"/>  connectionString="server=localhost; user id=root; password=******; database=northwind" 
  8.   providerName="MySql.Data.MySqlClient"/>  
  9.   </connectionStrings>  
  10.  </configuration> 

  (要安裝 MySql Connector Net 才能運行)

  小結

  ADO.NET 提供了數據庫無關的類,簡化了數據庫無關應用程序的開發。

  但開發數據庫無關的應用程序還有很多要注意的地方,如上面提到的 count(*) 返回值類型問題,還有要寫數據庫無關的 Sql 等等,也非易事。

  ***說一下,數據庫無關也是有一定限制的,本文介紹的方式只適用于關系型數據。

原文鏈接:http://www.cnblogs.com/ldp615/archive/2011/07/20/develop-db-independ-application-with-ado-dot-net.html

【編輯推薦】

  1. 詳細述說ADO超時相關問題介紹
  2. 漫談ADO.NET連接池相關注意問題說明
  3. 如何更好的進行ADO.NET連接池連接
  4. 剖析ADO.NET連接池優缺點
  5. 談談ADO.NET數據庫連接池創建和分配
責任編輯:彭凡 來源: 博客園
相關推薦

2011-10-09 13:38:14

數據庫

2009-12-23 17:30:54

ADO.NET應用程序

2009-12-21 13:38:29

ADO.NET應用程序

2010-01-04 13:56:50

ADO.NET應用程序

2009-10-29 13:16:15

ADO.NET應用程序

2009-12-23 16:57:35

理解ADO.NET

2009-03-11 14:45:25

Data ServicASP.NETADO.NET

2009-12-23 10:18:21

ADO.NET 應用程

2009-12-24 14:06:22

ADO.NET 應用程

2009-12-18 16:56:05

ADO.NET應用程序

2009-12-24 14:12:33

2009-12-28 16:50:28

ADO.NET應用程序

2011-05-20 13:11:22

ADO.NET

2009-11-03 14:46:47

ADO.NET數據庫

2009-12-31 09:18:23

ADO.NET對象模型

2009-12-22 09:59:06

ADO.NET數據庫

2011-03-04 11:08:46

ADO.NET數據庫

2009-12-18 17:29:40

ADO.NET應用程序

2009-12-24 10:37:03

ADO.NET訪問數據

2009-12-23 15:53:36

ADO.NET訪問數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.久久久久久久久久久久 | 人人干免费 | 亚洲免费在线播放 | 人人九九 | 亚洲精品久久久久国产 | 国产福利91精品 | 亚洲国产精品人人爽夜夜爽 | 精品国产一区二区三区免费 | 一区二区三区四区不卡 | 国产免费一区二区三区 | 国产精品一区二区三 | 一本色道久久综合亚洲精品高清 | 国产免费一区 | 久草在线高清 | 久久久精品一区 | 免费观看一区二区三区毛片 | 久久高清 | 一区二区三区不卡视频 | 欧美爱爱视频网站 | 国产伦一区二区三区 | 狠狠综合久久av一区二区老牛 | 日日人人 | 91精品观看 | 四虎影院欧美 | 精品少妇一区二区三区日产乱码 | 久久久久国产精品一区 | 犬夜叉在线观看 | 黄色大片网 | 亚洲欧美在线观看 | 精品伊人久久 | 国产视频一区二区三区四区五区 | 天堂网中文 | 日韩精品免费在线观看 | 女同久久另类99精品国产 | 91亚洲精品国偷拍自产在线观看 | 欧美舔穴| 最新国产精品精品视频 | 亚洲视频在线播放 | 久久最新精品视频 | 成人精品一区二区三区中文字幕 | 精品国产一区二区三区日日嗨 |