日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ADO.NET開發(fā)數(shù)據(jù)庫無關(guān)性應(yīng)用程序

數(shù)據(jù)庫無關(guān)性(DB Independ),指應(yīng)用程序運(yùn)行不依賴于某一數(shù)據(jù)庫(如 SqlServer),能夠簡單(不再編譯)切換至其它數(shù)據(jù)庫(如 Oracle)。數(shù)據(jù)庫無關(guān)性是衡量系統(tǒng)的一個(gè)指標(biāo)。

泰興網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

  實(shí)現(xiàn)數(shù)據(jù)庫無關(guān)的應(yīng)用程序有很多種方式,可采用 NHibernate、EntityFramework 等。

  本文介紹最基本的一種方式,下面一步步完成一個(gè)簡單的數(shù)據(jù)庫無關(guān)的小程序。

  新建項(xiàng)目

  在Visual Studio中新建 Console Application:

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

  項(xiàng)目創(chuàng)建完成后,如下添加對 System.Configuration 的引用:

再給項(xiàng)目添加一個(gè)配置文件:

項(xiàng)目準(zhǔn)備完畢,結(jié)構(gòu)如下:

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

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

 
 
 
 
  1.   
  2.   
  3.   
  4.   
  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.   
  15.   

  注意,上面把連接字符寫在 connectionStrings 節(jié)中。不可寫在 appSettings 中,因?yàn)槌绦蛑幸玫?providerName 這個(gè)屬性。

  編寫數(shù)據(jù)庫無關(guān)的代碼

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

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

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

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

  ADO.NET 的數(shù)據(jù)無關(guān)使用了工廠模式,根據(jù)配置中的 providerName 可以獲取到這個(gè)工廠:

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

  DbProviderFactory 提供了多個(gè)方法,幫助我們創(chuàng)建訪問數(shù)據(jù)庫如需的對象:

 
 
 
 
  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 等都是數(shù)據(jù)庫無關(guān)的。

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

  1. 查詢員工數(shù)量

 
 
 
 
  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(*) 不同數(shù)據(jù)庫返回值類型不同(SqlServer 返回 Int32,MySql 返回 Int64),10~12行進(jìn)行了處理。

  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.   }

  切換數(shù)據(jù)庫

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

 
 
 
 
  1.   
  2.   
  3.   
  4.   
  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.   
  10.  

 ?。ㄒ惭b MySql Connector Net 才能運(yùn)行)

  小結(jié)

  ADO.NET 提供了數(shù)據(jù)庫無關(guān)的類,簡化了數(shù)據(jù)庫無關(guān)應(yīng)用程序的開發(fā)。

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

  ***說一下,數(shù)據(jù)庫無關(guān)也是有一定限制的,本文介紹的方式只適用于關(guān)系型數(shù)據(jù)。


本文標(biāo)題:ADO.NET開發(fā)數(shù)據(jù)庫無關(guān)性應(yīng)用程序
文章地址:http://www.5511xx.com/article/ccojide.html