明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

SUNWEN圖文說(shuō)明教程之----C#進(jìn)階(8)

[摘要]大家好,我是武漢華師的SUNWEN,今天Zzz....(快醒醒!啪!..啪!倒,叫我起來(lái)也不要用皮鞋來(lái)打嘛@#%&*).現(xiàn)在是五月四號(hào)晚上19:33,我好想睡覺(jué).只好打開(kāi)音樂(lè)來(lái)提神了!這一節(jié)我要講的是大家非常關(guān)心的,肯定也是非常感興趣的部分.嘿嘿,也是我寫(xiě)教程最拿手的部分----ADO數(shù)據(jù)...

大家好,我是武漢華師的SUNWEN,今天Zzz....(快醒醒!啪!..啪!倒,叫我起來(lái)也不要用皮鞋來(lái)打嘛@#$%&*).現(xiàn)在是五月四號(hào)晚上19:33,我好想睡覺(jué).只好打開(kāi)音樂(lè)來(lái)提神了!

這一節(jié)我要講的是大家非常關(guān)心的,肯定也是非常感興趣的部分.嘿嘿,也是我寫(xiě)教程最拿手的部分----ADO數(shù)據(jù)庫(kù)訪問(wèn).想到這,我就想起我在去年寫(xiě)的"訪問(wèn)數(shù)據(jù)庫(kù)"系列文章,嘿嘿!所以呢,如果你覺(jué)得對(duì)記錄集之類(lèi)的東西比較難理解的話,我推薦你先看一看我的那幾篇文章.好了,讓我們開(kāi)始吧!

什么是ADO(ActiveX Data Objects譯作ActiveX數(shù)據(jù)對(duì)象),ADO是一個(gè)非常簡(jiǎn)單的思想,一種讓你僅用一種方式去訪問(wèn)數(shù)據(jù)的思想.ADO不算一個(gè)新的思想,僅是采用現(xiàn)有的數(shù)據(jù)訪問(wèn)技術(shù),將其融合起來(lái).如果你不理解ADO,想一想ODBC吧!其實(shí)我們?cè)诟鉇SP的時(shí)候,就用到了ADO,還記得嗎,那個(gè)曾經(jīng)被我們用過(guò)無(wú)數(shù)次的set conn=Server.CreateObject("ADODB.Connection")嗎?是的,就是它.至于ADO的一些概念性的東西,請(qǐng)大家自行查閱資料,不過(guò),其實(shí)不了解也沒(méi)有關(guān)系,只把它想象成一個(gè)M$給我們的訪問(wèn)數(shù)據(jù)的工具吧!

OK,下面的例子是以一個(gè)M$ ACCESS 2000的數(shù)據(jù)庫(kù)為基礎(chǔ)的,它的結(jié)構(gòu)如下,表名是Categories,文件名是BugTypes.mdb ,趕快建一個(gè)吧:

Category ID Category Name
1 Bugbash stuff
2 Appweek Bugs
3 .NET Reports
4 Internal support

好的,我先把所有的程序都寫(xiě)出來(lái),然后我們來(lái)一句一句的品嘗:

000: // ADO\adosample.cs
001: using System;
002: using System.Data;
003: using System.Data.ADO;
004:
005: public class MainClass
006: {
007: public static void Main ()
008: {
009: // 設(shè)定好連接字符串和選擇命令字符串010: string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BugTypes.MDB";
011: string strAccessSelect = "SELECT * FROM Categories";
012:
013: //建立記錄集,并把Categories這個(gè)表填進(jìn)去
014: DataSet myDataSet = new DataSet();
015: myDataSet.Tables.Add("Categories");
016:
017: //建立ADO實(shí)例018: ADOConnection myAccessConn = new ADOConnection(strAccessConn);
019: ADODataSetCommand myAccessDataSetCmd = new ADODataSetCommand();
020: myAccessDataSetCmd.SelectCommand = new ADOCommand(strAccessSelect,myAccessConn);
021:
022: myAccessConn.Open();
023: try
024: {
025: myAccessDataSetCmd.FillDataSet(myDataSet,"Categories");
026: }
027: finally
028: {
029: myAccessConn.Close();
030: }
031:
032: try
033: {
034: // 一個(gè)記錄集可以包含多個(gè)表,我們把它們放到一個(gè)數(shù)組中035: DataTable[] dta = myDataSet.Tables.All;
036: foreach (DataTable dt in dta)
037: {
038: Console.WriteLine("Found data table {0}", dt.TableName);
039: }
040:
041: //下面的兩行程序展示了兩種從一個(gè)記錄集中得到這個(gè)數(shù)據(jù)集中的表格數(shù)的方法
042: Console.WriteLine("{0} tables in data set", myDataSet.Tables.Count);
043: Console.WriteLine("{0} tables in data set", dta.Length);
044: //下面的幾行程序說(shuō)明了如何從一個(gè)記錄集中依靠表格的名稱(chēng)來(lái)取得信息
045: Console.WriteLine("{0} rows in Categories table", myDataSet.Tables["Categories"].Rows.Count);
046: //列的信息是自動(dòng)從數(shù)據(jù)庫(kù)中得到的,所以我們可以用以下的代碼047: Console.WriteLine("{0} columns in Categories table", myDataSet.Tables["Categories"].Columns.Count);
048: DataColumn[] drc = myDataSet.Tables["Categories"].Columns.All;
049: int i = 0;
050: foreach (DataColumn dc in drc)
051: {
052: //打印出列的下標(biāo)和列的名稱(chēng)和數(shù)據(jù)類(lèi)型053: Console.WriteLine("Column name[{0}] is {1}, of type {2}",i++ , dc.ColumnName, dc.DataType);
054: }
055: DataRow[] dra = myDataSet.Tables["Categories"].Rows.All;
056: foreach (DataRow dr in dra)
057: {
058: //打印出CategoryID和CategoryName059: Console.WriteLine("CategoryName[{0}] is {1}", dr[0], dr[1]);
060: }
061: }
062: catch (Exception e)
063: {
064: Console.WriteLine("Oooops. Caught an exception:\n{0}", e.Message);
065: }
066: }
067: }
看起來(lái),這個(gè)例子是有一些復(fù)雜的,只怪我例子選的不好,呵呵.不過(guò),細(xì)細(xì)分析一下,還是可以理解的.我現(xiàn)在說(shuō)一下這個(gè)例子中幾個(gè)特別的東東.第一就是不象在ASP中,一個(gè)命令字符串被須被當(dāng)作一個(gè)命令對(duì)象.020做的正是這個(gè)事情.注意,在015行有一個(gè)myDataSet.Tables.Add("Categories")語(yǔ)句,這并不是把數(shù)據(jù)庫(kù)中的Categories這個(gè)表填進(jìn)去,只不過(guò)是建一個(gè)空表,而025才是真的填充數(shù)據(jù).

這個(gè)例子的輸出是:

Found data table Categories
1 tables in data set
1 tables in data set
4 rows in Categories table
2 columns in Categories table
Column name[0] is CategoryID, of type Int32
Column name[1] is CategoryName, of type System.String
CategoryName[1] is Bugbash stuff
CategoryName[2] is Appweek Bugs
CategoryName[3] is .NET Reports
CategoryName[4] is Internal support
好了,就說(shuō)到這吧,SUNWEN真是想睡了,什么音樂(lè)都不管用了,呵呵.這個(gè)例子還真要花大力氣才能完全理解.O.K.886!