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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
VisualStudio2008因LINQ成功登頂企業(yè)級(jí)開發(fā)

【獨(dú)家特稿】2010年4月12日是微軟Visual Studio 2010正式版發(fā)布的日子。作為Visual Studio的用戶,您是否還記得自己使用的***個(gè)Visual Studio版本?是否還記得CODE出***段代碼時(shí)的興奮?是否還記得那無數(shù)個(gè)尋找Bug的日日夜夜?開發(fā)頻道帶您一起走進(jìn)Visual Studio歷史,今天我們要介紹的是——Visual Studio 2008。

在.NET平臺(tái)中,ADO.NET可以說從一定程序上對(duì)數(shù)據(jù)的數(shù)據(jù)處理增強(qiáng)了許多。主要功勞在于它把數(shù)據(jù)的操作和數(shù)據(jù)封裝成對(duì)象來看待,這在很大程序上,使面向?qū)ο蟮某绦騿T生活步入“天堂”。

但比起Java程序員來說,還是生活在“水深火熱”之中,因?yàn)锳DO.NET,只是把數(shù)據(jù)的操作當(dāng)成對(duì)象,把查詢出來的數(shù)據(jù),封裝在一個(gè)集合對(duì)象中,從業(yè)務(wù)邏輯的解度看,這其實(shí)是沒有什么意義的,就是數(shù)據(jù)庫中的數(shù)據(jù),與我們應(yīng)用程序中的業(yè)務(wù)對(duì)象沒有關(guān)聯(lián)。但Java體系中的Hibernate,它可以使數(shù)據(jù)對(duì)象化,所以這對(duì)于.NET程序員來說是望塵莫及的。

隨著時(shí)間的推移,2008年,微軟發(fā)布了Visual Studio 2008,其中有一項(xiàng)新技術(shù)LINQ(當(dāng)然,LINQ不是在08年橫空出世的,因?yàn)樗请SVisual Studio 2008的版本誕生的),其實(shí)這個(gè)技術(shù)的概念并不新,就是可以把數(shù)據(jù)對(duì)象化,即所謂的實(shí)體類。雖然概念不新,但這個(gè)技術(shù),對(duì)于.NET的程序員來說,給開發(fā)帶來了不少的福音。也可以說LINQ使.NET的數(shù)據(jù)開發(fā),邁上了一個(gè)新臺(tái)階,對(duì)企業(yè)級(jí)開發(fā),提供了強(qiáng)有力的數(shù)據(jù)層的技術(shù)支持。

做個(gè)代碼對(duì)比吧,好象這樣更有說服力。

拿Northwind數(shù)據(jù)庫作例子吧。

先看一下其中幾個(gè)表的關(guān)系:

這里的Products表是依賴Categories表和Suppliers表,我們對(duì)Categories表進(jìn)行增刪改查。先看一下用ADO.NET來實(shí)現(xiàn):

 
 
 
 
  1. class Program
  2. {
  3. string constr = "Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sa";
  4. static void Main(string[] args)
  5. {
  6. Program pro = new Program();
  7. pro.Change();
  8. pro.Query();
  9. }
  10. void Query()
  11. {
  12. string sql = "select categoryid,categoryname,description from categories";
  13. DataTable CategoriesDT = new DataTable();
  14. SqlDataAdapter DA = new SqlDataAdapter(sql, constr);
  15. DA.Fill(CategoriesDT);
  16. Console.WriteLine("-------------------ADONET--------------------------");
  17. foreach (DataRow dr in CategoriesDT.Rows)
  18. {
  19. Console.WriteLine("編號(hào):" + dr["categoryid"].ToString());
  20. Console.WriteLine("名稱:" + dr["categoryname"].ToString());
  21. Console.WriteLine("描述:" + dr["description"].ToString());
  22. Console.WriteLine("---------------------------------------------------");
  23. }
  24. }
  25. void Change()
  26. {
  27. string sql = "insert into categories(categoryname,description) values(@categoryname,@description)";
  28. SqlConnection con = new SqlConnection(constr);
  29. SqlCommand cmd = new SqlCommand(sql, con);
  30. cmd.Parameters.Clear();
  31. cmd.Parameters.Add("@categoryname", SqlDbType.NVarChar).Value = "A type";
  32. cmd.Parameters.Add("@description", SqlDbType.NText).Value = "this is a description";
  33. try
  34. {
  35. con.Open();
  36. cmd.ExecuteNonQuery();
  37. }
  38. catch (Exception e)
  39. {
  40. Console.WriteLine("出錯(cuò):{0}", e.Message);
  41. }
  42. finally
  43. {
  44. con.Close();
  45. }
  46. }
  47. }

這里實(shí)現(xiàn)了查詢和添加,如果做修改和刪除只需要修改Change方法的中的SQL語句和相應(yīng)的參數(shù)就可以了。

下面看一下LINQ To SQL來實(shí)現(xiàn)的代碼(LINQ To SQL具體使用在這里不作說明,詳情可查看MSDN相關(guān)文章):

 
 
 
 
  1. class Program
  2. {
  3. string constr = "Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sa";
  4. static void Main(string[] args)
  5. {
  6. Program pro = new Program();
  7. pro.Change();
  8. pro.Query();
  9. }
  10. void Query()
  11. {
  12. NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  13. Table categories = northwindDC.GetTable();
  14. Console.WriteLine("---------------------LINQ--------------------------");
  15. foreach (Categories cate in categories)
  16. {
  17. Console.WriteLine("編號(hào):{0}", cate.CategoryID);
  18. Console.WriteLine("名稱:{0}", cate.CategoryName);
  19. Console.WriteLine("描述:{0}", cate.Description);
  20. Console.WriteLine("---------------------------------------------------");
  21. }
  22. }
  23. void Change()
  24. {
  25. //添加
  26. NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  27. Categories cate = new Categories();
  28. cate.CategoryName = "MyType";
  29. cate.Description = "this is a LINQ description";
  30. northwindDC.Categories.InsertOnSubmit(cate);
  31. northwindDC.SubmitChanges();
  32. ////修改
  33. //NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  34. //Table categories = northwindDC.GetTable();
  35. //Categories categ = categories.Single(cate => cate.CategoryID == 10);
  36. //categ.Description = "Change description where id equal 10";
  37. //northwindDC.SubmitChanges();
  38. ////刪除
  39. //NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  40. //Table categories = northwindDC.GetTable();
  41. //categories.DeleteOnSubmit (categories .Single(cate => cate.CategoryID == 10));
  42. //northwindDC.SubmitChanges();
  43. }
  44. }

會(huì)看到,如果用ADO.NET去實(shí)現(xiàn),我們能非常清晰的看到SQL語法的影子,并且是標(biāo)準(zhǔn)的T-SQL語句。其實(shí)在程序中出現(xiàn)SQL語句并不是什么大不了的事,很正常。那么讓我們看看LINQ的實(shí)現(xiàn)方式:

 
 
 
 
  1. NorthwindDataContext northwindDC = new NorthwindDataContext(constr);

這行代碼是用一個(gè)連接字符串作參數(shù)對(duì)象,這個(gè)對(duì)象我們看名字就可以明白,是代表數(shù)據(jù)庫(當(dāng)然這個(gè)名字是我們命名的,本身DataContext也是數(shù)據(jù)庫的意思),也就是說,可以把對(duì)象notrthwindDC看成一個(gè)數(shù)據(jù)庫本身。

 
 
 
 
  1. Categories cate = new Categories();  

這行代碼也很好理解,是一個(gè)實(shí)體類實(shí)例化后的實(shí)體對(duì)象,cate在這里代表一個(gè)實(shí)體,在數(shù)據(jù)表中,表是存放數(shù)據(jù)的載體,并且是存放行相同類型數(shù)據(jù)記錄的載體,每行記錄,就是一個(gè)實(shí)體,在這里就是指完整的產(chǎn)品類型實(shí)體了。

 
 
 
 
  1. cate.CategoryName = "MyType";
  2. .Description = "this is a LINQ description";

給對(duì)象的屬性賦值。

 
 
 
 
  1. northwindDC.Categories.InsertOnSubmit(cate);
  2. northwindDC.SubmitChanges();

然后把新產(chǎn)品類型實(shí)體添加到庫對(duì)象的Categories(這里是多個(gè)產(chǎn)品類型實(shí)體的類型集合)對(duì)象中。

至于LINQ的修改刪除,都是先找到準(zhǔn)備的產(chǎn)品類型實(shí)體后進(jìn)行操作。

通過ADO.NET和LINQ的代碼,我們能看到,在LINQ的代碼中,是找不到T-SQL語句的,我們操作的都是對(duì)象,或?qū)ο蟮募希⑶蚁馤INQ中這樣,給對(duì)象賦值,操作對(duì)象是很常見的,并且也是非常容易理解的,并且也能很好的與我們的業(yè)務(wù)對(duì)象溶為一體,使整個(gè)開發(fā)過程渾然一體,而不是在ADO.NET中那樣,是通過操作數(shù)據(jù)庫操作對(duì)象,和存放數(shù)據(jù)的對(duì)象來達(dá)到對(duì)數(shù)據(jù)的操作。盡管LINQ是封裝了ADO.NET來達(dá)到這種效果的,運(yùn)行效率上說不如ADO.NET,但LINQ的技術(shù)則會(huì)在我們開發(fā)習(xí)慣,留下更多的時(shí)間來彌補(bǔ)這個(gè)缺點(diǎn)。

其實(shí)LINQ的優(yōu)點(diǎn)還表現(xiàn)在表間關(guān)系。在前面的圖中,有表間關(guān)系,比如Products和Categories,是有一種關(guān)系的。同樣在LINQ To SQL中,我們是可能表現(xiàn)到這種關(guān)系的。如果構(gòu)建好了LINQ To SQL的類,則或以這樣使用關(guān)系:

cate.Products

這是一個(gè)集合,可以調(diào)用Add方法,添加多個(gè)Products類型。

而每個(gè)Products實(shí)例對(duì)象,則只有一個(gè)Categories屬性,只能賦一個(gè)Categories類型的值,在這里也體現(xiàn)出表的一(Categories)對(duì)多(Products)的關(guān)系了。

在這里說明一點(diǎn),也是難于解決的一點(diǎn),就是如果我們單從程序中看代碼含意的時(shí)候,會(huì)被搞混的,看如下代碼:

 
 
 
 
  1. Categories cate = new Categories();
  2. cate.Products
  3. Products produ = new Products();
  4. produ .Categories

cate的Products就是一個(gè)集合,而produ的Categories則是一個(gè)對(duì)象,按理produ.Categorie這樣看起來更合適點(diǎn),但Visual Studio 2008不能這樣處理,因?yàn)樗前凑諗?shù)據(jù)的表名來生成類的屬性的,所以這里就要分清,那個(gè)代表關(guān)系中的“一”,那個(gè)代表關(guān)系中的“多”。

LINQ To SQL僅僅是LINQ 的一部分,LINQ不但對(duì)數(shù)據(jù)進(jìn)行對(duì)象操作,還可能對(duì)集合,數(shù)組,XML數(shù)據(jù)進(jìn)行處理,使對(duì)數(shù)據(jù)的處理達(dá)到一種統(tǒng)一,這也是LINQ的功勞。

可以說,LINQ的出現(xiàn),使VS成為更優(yōu)秀,更合理的企業(yè)級(jí)開發(fā)工具。

作者簡介

桂素偉,微軟MVP,專家堂成員。微軟中文技術(shù)論壇Visual C#、IT職業(yè)規(guī)劃談兩個(gè)版塊版主,微軟WebCast講師。精通C#,WinForm,ASP.NET,WPF,Windows Mobile等開發(fā)技術(shù)。山西DotNet俱樂部創(chuàng)始人之一,曾組織多次與微軟合作組織活動(dòng),并多次組織山西DotNet俱樂部線上線下活動(dòng)。

 

【編輯推薦】

  1. Windows 7下Visual Studio 2008安裝詳解
  2. Visual Studio 2008中三大問題的解決方法
  3. 不能不知的VS2008技巧與便捷
  4. 對(duì)VS2008簡介與日常使用
  5. 詳細(xì)分析VS2008專業(yè)版相關(guān)功能

本文標(biāo)題:VisualStudio2008因LINQ成功登頂企業(yè)級(jí)開發(fā)
文章URL:http://www.5511xx.com/article/dhpgggj.html