自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解C#下數(shù)據(jù)庫編程

開發(fā) 后端
本文將介紹C#下數(shù)據(jù)庫編程,筆者試著用C#結(jié)合ADO.NET研發(fā)了一些項目?,F(xiàn)借這個機會,和讀者們一起分享C#研發(fā)數(shù)據(jù)庫的快樂。
前言:

  曾幾何時,OO語言大家族中又多了一位新成員,他有個堅強、銳利而又不失好聽的名字,C#(讀做C Sharp)。C#由Microsoft一手打造,更重要的是其總設(shè)計師就是Turbo Pascal、Delphi的***、天才的Anders。記得在一次C#的演示會上,Anders和Microsoft的主管人員曾立下壯志,要讓C#取代VC++,成為今后.NET研發(fā)的***選擇語言。但后來的許多負面的議論也不免讓人對這個C#表示懷疑,有人說C#就是JAVA的翻版,幾乎沒有什么自己的特點,更有人說C#效率低下,而且和VB.NET有非常大類同,根本就沒有意義推出,不久就會下臺并最終死亡,等等。我們也不禁懷疑起來,C#真的這么命短?真的會和JAVA沒有什么大的交鋒就英年早逝?

  兩年多過去了,這種議論大部分已隨著事實不攻自破。C#不僅沒有死亡,而且有著超乎尋常的生命力,正在用他鋒利的語言利劍,讓世人真正領(lǐng)教了什么叫做系出名門、天生立志。在.NET平臺研發(fā)上,C#已成為無可爭議的***選擇語言,更令人吃驚的是,這個人稱和JAVA雷同的"仿制品"語言卻不知道為什么,一步步在蠶食JAVA的地盤,令JAVA的***已開始感到不安,更讓JAVA的使用者或多或少有些動搖。

  大約1年前,我接觸到了C#,并且試著以我一貫審視IT界發(fā)展的眼光去審視他。通過一些日子的學(xué)習(xí)和體會,我確實感覺這個語言的不平凡性,特別是他充分利用了.NET的優(yōu)勢和特點,并有VS.NET的***集成于.NET研發(fā)平臺中。在我長年研發(fā)的數(shù)據(jù)庫領(lǐng)域,我試著用C#結(jié)合ADO.NET研發(fā)了一些項目。現(xiàn)借這個機會,和讀者們一起分享C#研發(fā)數(shù)據(jù)庫的快樂。  正文:

  如果你以前用過Visual Foxpro研發(fā)數(shù)據(jù)庫項目,你就會有這種體會,VFP對數(shù)據(jù)庫的操作,還是一種對數(shù)據(jù)庫文件的操作,比如:

  OPEN DATABASE MyDatabase &&打開數(shù)據(jù)庫MyDatabase

  USE MyTable &&打開數(shù)據(jù)庫中的MyTable表

  GO 5 &&將Cursor跳到第5條記錄

  REPLACE MyName WITH "楊揚" &&用"楊揚"替換第5條記錄上的MyName字段

  GO BOTTOM &&將Cursor跳到***一條記錄

  LOCATE FOR MyName=="楊揚" &&查找并定位

  IF FOUND()

  ? "FOUND!"

  ELSE

  ? "NOT FOUND!"

  ENDIF

  USE &&關(guān)閉MyTable

  CLOSE DATABASE MyDatabase &&關(guān)閉數(shù)據(jù)庫MyDatabase

  這段小程式能說是VFP中比較簡單的一段小程式了,但非常有代表性。從這段程式我們能感覺到,在VFP想操縱一個數(shù)據(jù)庫中的一個表需要許多類似文件的操作,比如:打開數(shù)據(jù)庫、打開表、跳轉(zhuǎn)Cursor、讀取字段內(nèi)容、查找字段內(nèi)容、關(guān)閉表、關(guān)閉數(shù)據(jù)庫等等。這些操作雖然直觀易懂,但十分不方便使用,而且如果同時有多個表打開,經(jīng)常會出現(xiàn)表的輪換訪問的問題,就需要不斷的轉(zhuǎn)換表的工作區(qū),十分的麻煩和容易出錯。最關(guān)鍵的是,這種操作方法不符合OO思想的精華--封裝。

  如果你熟悉OO編程思想,或原來有OO設(shè)計經(jīng)驗,你可能會和我相同這樣想,如果一個數(shù)據(jù)庫就是個對象,所有的操作、信息都通過方法(Method)、屬性(Attribure)、事件(Event)提供出來,供研發(fā)者使用,那該多好啊。C#正是借助基于這種思想設(shè)計的數(shù)據(jù)庫訪問技術(shù)ADO.NET,并提供了一系列方便實用的類。應(yīng)用這些數(shù)據(jù)庫訪問的類,你就能輕松、準確而且是面向?qū)ο蟮牟倏v數(shù)據(jù)庫中的各種數(shù)據(jù)了。

  如圖,這就是C#中提供的數(shù)據(jù)庫訪問ADO.NET的結(jié)構(gòu)圖。

  

  從這張圖中,我們能清晰的了解到ADO.NET的數(shù)據(jù)訪問技術(shù)的架構(gòu)。ADO.NET支持SQL Server數(shù)據(jù)訪問和OLE DB數(shù)據(jù)訪問。兩者相比,前者是針對SQL Server的數(shù)據(jù)庫訪問引擎,所以訪問SQL Server數(shù)據(jù)庫效率會高許多,但只支持SQL Server。后者是比較通用的數(shù)據(jù)庫訪問引擎,能支持廣泛的數(shù)據(jù)庫,但效率不如前者。對研發(fā)者來說,如果不用到某種數(shù)據(jù)庫的特性,其大體使用方法是一致的。

  上述內(nèi)容指數(shù)據(jù)庫的連接部分,也就是上圖中的Connetion對象。Connection對象提供了和具體數(shù)據(jù)庫的連接方式,具體你是用SqlConnection對象還是OleDbConnection對象,這個根據(jù)你的數(shù)據(jù)庫類型由你選擇而定,下面的敘述中,為了不占用過多的篇幅,在無特別內(nèi)容的地方,不再分開敘述。

  下面給出兩段典型的數(shù)據(jù)庫連接的例子。在此之前,請在程式頭部using處添加using System.Data.SqlClient或System.Data.OleDb,以確保數(shù)據(jù)庫訪問時用到的命名空間能引用

  SQL Server數(shù)據(jù)訪問

  string strConn="Integrated Security=SSPI;Initial Catalog=MyDatabase;Data Source=YY-POWERPC ";

  SqlConnection myConnection = new SqlConnection (strConn);

  myConnection.Open();

  OleDb數(shù)據(jù)訪問

  String strConn="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;Integrated Security=SSPI";

  OleDbConnection myConnection=new OleDbConnection (strConn);

  myConnection.Open();

  上述步驟執(zhí)行后,如果沒有異常拋出,便可成功完成和數(shù)據(jù)庫的連接。在完成了和數(shù)據(jù)庫的連接后,接下來就是建立一個DataAdapter對象,來完成可訪問數(shù)據(jù)庫的工作。DataAdapter的工作是后面DataSet的基礎(chǔ),其內(nèi)容就是建立一個DataSet和數(shù)據(jù)庫的中間層,來協(xié)調(diào)訪問。由于DataAdapter和DataSet的關(guān)系十分緊密,我就結(jié)合在一起介紹了。DataAdapter也分為SqlDataAdapter和OleDbDataAdatper兩種。下面給出一段典型代碼(OleDbDataAdapter的情況可類推):

  SqlDataAdapter myDataAdapter = new SqlDataAdapter ();

  DataSet myDataSet = new DataSet ();

  string strCom = "SELECT * FROM 會員信息表";

  myDataAdapter.SelectCommand = new SqlCommand (strCom,myConnection);

  SqlCommandBuilder myCB = new SqlCommandBuilder (myDataAdapter);

  myDataAdapter.Fill (myDataSet,"會員信息表");

  這段代碼用到了SqlDataAdapter、DataSet、SqlCommand、SqlCommandBuilder四個對象。從上圖中能看出,SqlDataAdapter的作用就是負責(zé)和數(shù)據(jù)庫的通訊訪問,同時和DataSet相連,他的內(nèi)部有四個非常重要的Command對象(同樣分為SqlCommand和OleDbCommand),都是訪問數(shù)據(jù)庫必用的,分別為SelectCommand、InsertCommand、UpdateCommand、DeleteCommand對象。這些Command對象便是專門用來完成對數(shù)據(jù)庫的查詢、插入、更新、刪除操作,他們就像四個大臣,在DataAdapter的控制下分別主管各自的事情。其中SelectCommand是他們四個中的老大,由他能自動的構(gòu)造生成另外的三個。構(gòu)造生成的過程就是應(yīng)用CommandBuilder。在這之前,我們只需要指定DataAdapter中的SelectCommand對象,就能了。

  在設(shè)置好了SQL Select語句后,就能開始填充相應(yīng)的數(shù)據(jù)集了。方法是應(yīng)用DataAdapter的Fill方法,參數(shù)為DataSet及其中的某個DataTable。這里要著重講一講DataSet對象。如果你用過ADO中的Recordset對象,你可能會感覺到DataSet和Recordset的差別。Recordset一般只能應(yīng)用于單表,即一個Recordset對應(yīng)于一張表。而DataSet中有一個DataTableCollection,即一個DataTable集合,能包含多個DataTable對象。DataTable對象看上去就更加像一張表了,其中有DataRowCollection、DataColumnCollection、ConstraintCollection。他們分別代表DataRow(數(shù)據(jù)行)、DataColumn(數(shù)據(jù)列)、Constraint(約束關(guān)系)的對象集合??赡苷f這么多,你已有點兒迷糊了,先看一句代碼吧。

  myDataSet.Tables["MyTable"].Rows[3]["MyName"] = "楊揚";

  怎么樣?是不是一下子就明白了許多。這是一句多么***的OO思想表達出的語句啊!這句就是將DataSet下的一個名為MyTable的"虛表"中的第4行的MyName字段的內(nèi)容改為"楊揚"。為什么叫"虛表"呢?這是因為ADO.NET的一個特點就是脫機連接數(shù)據(jù)庫。這樣能減少網(wǎng)絡(luò)通訊的壓力,提高效率。你可能會問DataColumn在哪呢?Rows[3]就表示了第4行記錄,換句話說Rows[3]就是個DataRow對象,一加上["MyName"]就自動定位到了MyName字段的內(nèi)容。ADO.NET規(guī)定,訪問表中內(nèi)容必須是先行后列的原則,Column["MyName"][3]是不允許的。當然,DataColumn也是什么重要的,比如想查看某列的列頭(Field),能用Column[1].ColumnName更改。

  好了,目前我覺得你應(yīng)該大體上明白C#+ADO.NET是怎么操縱數(shù)據(jù)庫的了吧,其實這里只是講了一小部分,因為ADO.NET數(shù)據(jù)庫訪問技術(shù)包含的內(nèi)容太多了,不是一兩遍文章就能說清的。更有許多許多有用的操作,比如添加、修改、刪除、更新、查詢等等都還沒有介紹。

責(zé)任編輯:彭凡 來源: sudu.cn
相關(guān)推薦

2009-08-07 16:19:00

C#下數(shù)據(jù)庫編程

2009-08-25 16:36:16

C#進行數(shù)據(jù)庫編程

2009-08-07 15:38:15

精通C#數(shù)據(jù)庫編程

2010-05-14 09:08:10

C#Oracle

2010-09-13 09:03:49

Access數(shù)據(jù)庫

2024-04-03 00:06:03

2009-08-11 13:35:13

C# Berkeley

2024-03-04 18:49:59

反射C#開發(fā)

2009-08-25 17:13:57

C#串口編程

2024-04-18 09:56:16

2009-08-07 15:33:11

C#數(shù)據(jù)庫編程

2009-03-19 10:08:09

C#數(shù)據(jù)庫查詢

2009-08-25 10:57:09

C#接口

2009-08-07 15:26:38

C#數(shù)據(jù)庫編程實例

2009-08-25 12:50:32

數(shù)據(jù)庫常用C#代碼

2009-08-12 14:27:36

訪問MySQL數(shù)據(jù)庫C# ODBC

2010-10-26 15:21:11

連接Oracle數(shù)據(jù)庫

2009-08-24 18:09:13

C#調(diào)用Oracle數(shù)

2009-08-17 17:42:57

C#數(shù)據(jù)庫操作類

2009-08-06 18:10:06

C#數(shù)據(jù)庫事務(wù)
點贊
收藏

51CTO技術(shù)棧公眾號