軟件工程_關(guān)于代碼自動生成技術(shù)的分析_第1頁
軟件工程_關(guān)于代碼自動生成技術(shù)的分析_第2頁
軟件工程_關(guān)于代碼自動生成技術(shù)的分析_第3頁
軟件工程_關(guān)于代碼自動生成技術(shù)的分析_第4頁
軟件工程_關(guān)于代碼自動生成技術(shù)的分析_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、. . . . 目錄前 言1第一章 概述21.1背景21.2研究代碼自動生成技術(shù)的必要性41.3 本課題的主要研究容6第二章 代碼自動生成技術(shù)72.1 代碼生成的機理72.2 三層B/S架構(gòu)82.3 設(shè)計模式92.4 反射技術(shù)122.5 緩存技術(shù)132.6 XML技術(shù)152.7 語法高亮顯示17第三章 系統(tǒng)分析與設(shè)計183.1 系統(tǒng)分析183.1.1 系統(tǒng)開發(fā)環(huán)境183.1.2 需求分析183.1.3 系統(tǒng)用例圖與詳細(xì)說明213.2 系統(tǒng)設(shè)計方案283.2.1 設(shè)計原則283.2.2 系統(tǒng)類28第四章 系統(tǒng)實現(xiàn)324.1 系統(tǒng)界面設(shè)計324.2系統(tǒng)功能實現(xiàn)344.2.1 數(shù)據(jù)庫新連接(即導(dǎo)入數(shù)

2、據(jù)庫信息)功能的實現(xiàn)344.2.2 代碼生成功能的實現(xiàn)344.2.3 代碼導(dǎo)出功能的實現(xiàn)364.2.4 數(shù)據(jù)庫查詢分析功能的實現(xiàn)36第五章 難點與對策385.1 數(shù)據(jù)庫表信息的讀取385.2 將xml數(shù)據(jù)加載到樹形控件上395.3 語法高亮顯示的實現(xiàn)41第五章 總結(jié)與展望435.1 總結(jié)435.2 展望44致45參考文獻4647 / 49前 言 現(xiàn)在軟件工程所涉與到的系統(tǒng)規(guī)模越來越大。大型的程序需要多人共同參與和開發(fā),每個人的程序風(fēng)格不同,再加上時間上的壓力,這使得系統(tǒng)完成以后在測試與維護上帶來了沉重的負(fù)擔(dān)。計算機科學(xué)家一直致力于這方面的研究。在解決代碼規(guī)以與工作效率上,代碼自動生成

3、技術(shù)顯現(xiàn)出了其很大的優(yōu)越性。代碼自動生成器一個最關(guān)鍵的功能就是讓程序員盡可能減輕負(fù)。當(dāng)然任何東西都不能取代人在當(dāng)中的作用,代碼自動生成器主要來完成一些有規(guī)律可尋的代碼生成。比如我們平常一般用到的MODEL類就是一個很簡單的基類,它的模式基本上是固定的。如果一個系統(tǒng)有上百個MODEL類,那么程序員可能要話很長的時間來編寫。而用了相應(yīng)的自動生成器只需簡單幾步就很全部生成。我想這樣的工作是非常有意義的。TianHao正是在這樣的環(huán)境下計劃開發(fā)的。TianHao生成的代碼基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計?,F(xiàn)在的系統(tǒng)常用到的是三層架構(gòu)。一個典型的例子就是微軟的示例代碼Petshop。Petshop包含了

4、很多經(jīng)典的思想和設(shè)計模式。TianHao結(jié)合了Petshop的開發(fā)模式,尋求編碼規(guī)律,并融入了工廠模式,反射機制等一些思想。TianHao 同時提供支持多類型數(shù)據(jù)庫,并且能夠方便的對數(shù)據(jù)庫查詢分析,存儲過程生成,代碼批量自動輸出等多項開發(fā)工作中常用到的功能。第1章 概述1.1背景在軟件工程發(fā)展過程中,計算機科學(xué)家為了降低軟件開發(fā)得強度,縮短開發(fā)周期,減少代碼的重復(fù)書寫,從而減輕程序員的編程負(fù)擔(dān),一直以來都致力于代碼自動生成方面的研究。Lex/Yacc是最早用于自動化編寫編譯程序的工具。 我們可以將代碼生成技術(shù)分為兩大類:被動模式和主動模式。在被動模式下,代碼生成器產(chǎn)生一系列的代碼,然后軟件開發(fā)

5、者可以自由的修改、編輯這些代碼,但代碼生成器不再承擔(dān)對代碼的維護工作。大多數(shù)軟件集成開發(fā)環(huán)境(IDE)中的應(yīng)用“向?qū)А本褪沁@種類型的代碼生成器。被動模式的代碼生成技術(shù)有其應(yīng)用的圍,但是被動模式的生成系統(tǒng)有天生的局限性。生成器只運行一次,然后就不再承擔(dān)對代碼的維護工作。 與此相反,主動模式下的代碼生成器則對生成的代碼“長期”負(fù)責(zé),可以通過改變生成器的輸入?yún)?shù)并重新運行生成器來改變輸出的代碼。如編譯器生成器就是一種主動模式 的代碼生成器。 下面我們介紹幾種常見的代碼生成技術(shù),這些技術(shù)對開發(fā)一個實用的代碼生成器非常重要??梢砸罁?jù)代碼生成技術(shù)的使用場合、復(fù)雜度等對這些生成技術(shù)進行分類,這里我們采用依據(jù)

6、生成技術(shù)的輸入、輸出對它們進行分類。 (1) 代碼挑揀器,代碼挑揀器的輸入是源代碼,通過揀取需要的信息可以生成各種文件,代碼挑揀器的使用相當(dāng)廣泛,可以使用它來生成代碼API文檔、獲取常量和函數(shù)原型等。 (2) 聯(lián)代碼擴展器,聯(lián)代碼擴展器的輸入是帶有特殊標(biāo)記的源代碼,這些特殊標(biāo)記經(jīng)過擴展器的處理后將被替換為相關(guān)的代碼從而產(chǎn)生最終的生產(chǎn)源代碼,聯(lián)代碼擴展器的典型應(yīng)用是將SQL語句嵌入到源代碼中,其主要特點是使得底層結(jié)構(gòu)和復(fù)雜的查詢分開。(3) 混合代碼生成器 混合代碼生成器與聯(lián)代碼擴展器很像,它也是處理源代碼中的特殊注釋但是與聯(lián)代碼擴展器不同,它的結(jié)果將直接輸出到輸入的源代碼中。這種方式的一個典型

7、應(yīng)用就是在對話框控件和它們代表的變量之間建立映射關(guān)系。(4) 部分類生成器 部分類生成器的輸入是模板文件和包含特定類所需信息的定義文件,這些信息經(jīng)過生成器將產(chǎn)生應(yīng)用的基類。通過繼承該基類可以完成剩余的工作。Velocity是一個源代碼開放的Java模版引擎。(5) 層第生成器 層第生成器將生成一個多層應(yīng)用的所有代碼。模型驅(qū)動的開發(fā)是這種生成器的一個很好例子。通過UML模型輸入和其余XML文件,生成器能夠生成一個包含多個系統(tǒng)的完整應(yīng)用,并且模型和代碼之間可以單項乃至雙項同步。(6) 完全領(lǐng)域語言 完全領(lǐng)域語言是一個圖靈完全的語言,可以直接使用來進行領(lǐng)域相關(guān)的操作。 目前常見的代碼生成器有:DbT

8、oCode 是一款為 C# 數(shù)據(jù)庫程序員設(shè)計的自動代碼生器,DbToCode 生成的代碼基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計,結(jié)合了Petshop中經(jīng)典的思想和設(shè)計模式,融入了工廠模式,反射機制等等一些思想。采用 Model + DAL + BLL + Web 的設(shè)計,主要實現(xiàn)在 C# 中對應(yīng)數(shù)據(jù)庫中表的基類代碼的自動生成,包括生成屬性、添加、修改、刪除、查詢、存在性、 Model 類構(gòu)造等基礎(chǔ)代碼片斷,使程序員可以節(jié)省大量機械錄入的時間和重復(fù)勞動,而將精力集中于核心業(yè)務(wù)邏輯的開發(fā)。Codematic 生成的代碼基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計,結(jié)合了Petshop中經(jīng)典的思想和設(shè)計模式,融入了工

9、廠模式,反射機制等等一些思想。Codematic 同時提供方便的多類型數(shù)據(jù)庫管理,查詢分析器,SQL腳本生成,存儲過程生成,數(shù)據(jù)庫文檔生成,Web項目發(fā)布,代碼批量自動輸出等多項開發(fā)工作中常用到的功能,您可以很方便輕松地進行項目開發(fā)。AutoJava 是一款免費的,針對于Oracle和SQLserver數(shù)據(jù)庫的、以面向?qū)ο竽J降腏ava代碼生成工具。AutoJava根據(jù)O/R Mapping規(guī)則生成表對應(yīng)的Java對象,并且生成了所有的添加、刪除、修改、查詢等底層數(shù)據(jù)庫操作代碼。1.2研究代碼自動生成技術(shù)的必要性隨著現(xiàn)代化信息環(huán)境日趨復(fù)雜,各種應(yīng)用軟件的開發(fā)難度隨之加大,這需要更有技巧,更有方

10、法地從事軟件開發(fā),開發(fā)團隊之間也必須更無障礙地溝通,否則極可能無法在有限的開發(fā)時間中完成任務(wù)。由于時間上的壓力,一般人只注重程序的編寫速度,卻忽略其完成后的實用性與維護性,加上大型程序多人共同參與開發(fā),每個人都有各自的程序風(fēng)格,容易造成嚴(yán)重的差異性,隨著系統(tǒng)規(guī)模越來越大,這將造成系統(tǒng)完成后在測試與維護上沉重的負(fù)擔(dān),代碼自動生成技術(shù)更顯出了其顯著的優(yōu)越性。盡管這些應(yīng)用沒有代碼生成工具也能開發(fā)完成,但利用代碼生成技術(shù)可以大大加速軟件的開發(fā)進度,提高軟件的質(zhì)量。代碼生成技術(shù)是關(guān)于自動生成程序的程序的技術(shù)。與手工書寫代碼相比,代碼生成器提供了下面的一些好處: (1)所有軟件實體的一致的代碼質(zhì)量,代碼的

11、質(zhì)量依賴且只依賴于代碼生成的模板、文件和模型。與此相比,手工經(jīng)常采用的拷貝粘貼的方法為前后代碼質(zhì)量的一致性帶來了隱患。 (2)提高了代碼變更的能力,特別在需要大量更改代碼的情況下,只需要更改模板并重新運行代碼生成器即可。 (3)提高了修復(fù)軟件Bug的能力,只需要修復(fù)模板的Bug然后重新運行生成器就可以修復(fù)所有的生成文件的Bug。 (4)提高了在不同框架之間的遷移能力,一個典型的情形是我們需要生成不同框架(如J2EE/.Net)的應(yīng)用代碼,代碼生成技術(shù)將業(yè)務(wù)邏輯以語言無關(guān)的形式單獨存放,通過為不同的框架提供代碼模板可以基于同一邏輯生成不同框架的應(yīng)用代碼。 (5)靈活的同步機制,代碼生成技術(shù)自動維

12、護代碼和數(shù)據(jù)模型的一致性,通過重新運行生成器,對模型的修改可以自動反映到代碼中,這種同步機制對維護數(shù)據(jù)的一致性是非常必要的。 (6)大幅度提高了工作效率,運用代碼生成技術(shù)可以將更多的時間花費在業(yè)務(wù)相關(guān)的設(shè)計和實現(xiàn)上,從而可以大大提高軟件的開發(fā)效率和軟件質(zhì)量。 (7)是代碼學(xué)習(xí)的導(dǎo)師,由于生成的代碼具有良好的風(fēng)格和100%的健壯性,程序開發(fā)者很容易模仿代碼風(fēng)格,從中學(xué)習(xí)。 1.3 本課題的主要研究容本課題的主要目標(biāo)是在Windows XP平臺下,利用.NET C#實現(xiàn).NET(C#)代碼自動生成軟件(如上1.1背景說述,該軟件屬于代碼自動生成的部分類生成器)。本軟件主要包含功能如下:(1)實現(xiàn)在

13、對應(yīng)數(shù)據(jù)庫中表的基類代碼的自動生成,包括生成屬性、添加、修改、刪除、查詢、存在性、Model 類構(gòu)造等基礎(chǔ)代碼片斷。(2)自動生成數(shù)據(jù)庫的存儲過程。(3) 支持不同架構(gòu)代碼生成,用戶可以定義命名。(4)自動生成實體Model,DAL(數(shù)據(jù)訪問層),IDAL(接口層),DALFactory(類工廠),BLL(業(yè)務(wù)邏輯層)等多層的代碼。(5)代碼批量生成自動導(dǎo)出功能。第二章 代碼自動生成技術(shù)2.1 代碼生成的機理代碼生成器的作用是讀取工程的元數(shù)據(jù),按照指定的設(shè)計模式,混合產(chǎn)生出規(guī)的源代碼。典型的代碼生成器模型如圖2-1所示。在圖中,為自動生成程序代碼,必需的三個關(guān)鍵要素是設(shè)計模式(所產(chǎn)生代碼的模板

14、文件)、領(lǐng)域元數(shù)據(jù)(在代碼中需建模的拓?fù)浣Y(jié)構(gòu),即定義文件,通常隨開發(fā)折提供的特定數(shù)據(jù)增長)。 圖2-1 典型代碼生成器的模型圖 構(gòu)建自己的代碼生成器有2種方法,一是綜合利用流行的代碼生成器。構(gòu)建出適合自己的代碼生成器;另一種方法是構(gòu)造出一個全新的代碼生成器。無論哪種方法,在構(gòu)建代碼生成器都應(yīng)該注意下面幾個方面: (1)使用純文字樣版,使用純文字樣版的好處除了編輯方便外,也能將程序代碼定義邏輯和格式化邏輯分隔開來,使實作上更有彈性。 (2)編寫正規(guī)表達式(Regular Expression),正規(guī)表達式是一種字符串的表示方式,使用它不僅擴大了字符串的表達能力,讓使用者很容易進行字符串判斷,也可

15、避免撰寫程序進行復(fù)雜字符串解析的麻煩,也自然使得數(shù)據(jù)處理的過程變得更為迅速便利。 (3)編譯器原理,在對于文本文件的處理上,先利用掃描器(Scanner)掃描出其中的字符,再實作解析器(Parser)解析出所對應(yīng)的語法,然后轉(zhuǎn)換成所要產(chǎn)生的程序語言。 (4)文檔輸出入的處理, 由于程序產(chǎn)生牽涉到大量的文檔讀寫動作,需要定義合適的數(shù)據(jù)結(jié)構(gòu)與緩沖區(qū)機制來提升文檔存取的效率,另一方面來說,在編寫樣版文檔時也需考量到對于存取效率上的負(fù)擔(dān)。2.2 三層B/S架構(gòu)架構(gòu)設(shè)計是非常高級的設(shè)計,也是系統(tǒng)設(shè)計的關(guān)鍵,主要是定義和說明包(子系統(tǒng)),以與包與包之間的相互依賴與通信機制。系統(tǒng)構(gòu)架模型的合理與否將決定系統(tǒng)

16、的可維護性、擴展性和開發(fā)效率包通常所需要處理的是要么是一個具體的功能區(qū)域(業(yè)務(wù)邏輯),要么是一個具體的技術(shù)區(qū)域(技術(shù)邏輯)。業(yè)務(wù)邏輯主要考慮的是對系統(tǒng)業(yè)務(wù)功能的實現(xiàn),而技術(shù) 邏輯則是進一步考慮用戶界面、數(shù)據(jù)庫或通信機制等形成的技術(shù)方案。把技術(shù)邏輯和業(yè)務(wù)邏輯區(qū)分開來是極其重要的,這是為了當(dāng)修改程序的某一部分時不會對另一 部分產(chǎn)生影響,更加便于進行“復(fù)用”,同時易于應(yīng)對來自業(yè)務(wù)邏輯的變更需求。三層結(jié)構(gòu)是一種成熟、簡單并得到普遍應(yīng)用的應(yīng)用程序架構(gòu), 它將應(yīng)用程序結(jié)構(gòu)劃分三層獨立的包,包括用戶表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。其中將實現(xiàn)人機界面的所有表單和組件放在表示層,將所有業(yè)務(wù)規(guī)則和邏輯的實 現(xiàn)封裝

17、在負(fù)責(zé)業(yè)務(wù)邏輯組件中,將所有和數(shù)據(jù)庫的交互封裝在數(shù)據(jù)訪問組件中。其結(jié)構(gòu)如下圖2-2所示:圖2-2 三層結(jié)構(gòu)2.3 設(shè)計模式設(shè)計模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu)。將已證實的技術(shù)表述成設(shè)計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設(shè)計思路。一般而言,一個模式有四個基本要素:1. 模式名稱(pattern name) 一個助記名2. 問題(problem) 描述了應(yīng)該在何時使用模式。它解釋了設(shè)計問題和問題存在的前因后果,它可能描述了特定的設(shè)計問題,如怎樣用對象表示算法等。也可能描述了導(dǎo)致不靈活設(shè)計的類或?qū)ο蠼Y(jié)構(gòu)。有時候,問題部分會包括使用模式必須滿足的一系列先決條件。3. 解決方案(s

18、olution) 描述了設(shè)計的組成成分,它們之間的相互關(guān)系與各自的職責(zé)和協(xié)作方式。因為模式就像一個模板,可應(yīng)用于多種不同場合,所以解決方案并不描述一個特定而具體的設(shè)計或?qū)崿F(xiàn),而是提供設(shè)計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或?qū)ο蠼M合)來解決這個問題。4. 效果(consequences) 描述了模式應(yīng)用的效果與使用模式應(yīng)權(quán)衡的問題。盡管我們描述設(shè)計決策時,并不總提到模式效果,但它們對于評價設(shè)計選擇和理解使用模式的代價與好處具有重要意義。軟件效果大多關(guān)注對時間和空間的衡量,它們也表述了語言和實現(xiàn)問題。因為復(fù)用是面向?qū)ο笤O(shè)計的要素之一,所以模式效果包括它對系統(tǒng)的靈活性、擴充性或可移

19、植性的影響,顯式地列出這些效果對理解和評價這些模式很有幫助。設(shè)計模式常常劃分成不同的種類,常見的種類有: 創(chuàng)建型設(shè)計模式,如工廠方法(Factory Method)模式、抽象工廠(Abstract Factory)模式、原型(Prototype)模式、單例(Singleton)模式,建造(Builder)模式等 。結(jié)構(gòu)型設(shè)計模式,如合成(Composite)模式、裝飾(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、門面(Facade)模式、橋梁(Bridge)模式等 。行為型模式,如模版方法(Template Method)模式、觀察者(Observer)模

20、式、迭代子(Iterator)模式、責(zé)任鏈(Chain of Responsibility)模式、備忘錄(Memento)模式、命令(Command)模式、狀態(tài)(State)模式、訪問者(Visitor)模式等等。 以上是三種經(jīng)典類型,實際上還有很多其他的類型,比如Fundamental型、Partition型,Relation型等等。設(shè)計模式在特定的編程語言中實現(xiàn)的時候,常常會用到代碼模式。比如單例(Singleton)模式的實現(xiàn)常常涉與到雙檢鎖(Double-Check Locking)模式等。下面介紹重點介紹抽象工廠模式:在軟件系統(tǒng)中,經(jīng)常面臨著“一系列相互依賴的對象”的創(chuàng)建工作;同時由

21、于需求的變化,往往存在著更多系列對象的創(chuàng)建工作。如何應(yīng)對這種變化?如何繞過常規(guī)的對象的創(chuàng)建方法(new),提供一種“封裝機制”來避免客戶程序和這種“多系列具體對象創(chuàng)建工作”的緊耦合?這就是我們要說的抽象工廠模式。它的意圖是提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。模型如下圖所示:邏輯模型(圖2-3):圖2-3 邏輯模型物理模型(圖2-4):圖2-4 物理模型2.4 反射技術(shù)反射的定義:審查元數(shù)據(jù)并收集關(guān)于它的類型信息的能力。元數(shù)據(jù)(編譯以后的最基本數(shù)據(jù)單元)就是一大堆的表,當(dāng)編譯程序集或者模塊時,編譯器會創(chuàng)建一個類 定義表,一個字段定義表,和一個方法定義表等,。Sys

22、tem.reflection命名空間包含的幾個類,允許你反射(解析)這些元數(shù)據(jù)表的代碼。例如: Assembly類可以獲得正在運行的裝配件信息,也可以動態(tài)的加載裝配件,以與在裝配件中查找類型信息,并創(chuàng)建該類型的實例。 Type類可以獲得對象的類型信息,此信息包含對象的所有要素:方法、構(gòu)造器、屬性等等,通過Type類可以得到這些要素的信息,并且調(diào)用之。 MethodInfo包含方法的信息,通過這個類可以得到方法的名稱、參數(shù)、返回值等,并且可以調(diào)用之。 反射的作用: 1 可以使用反射動態(tài)地創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn) 有對象中獲取類型。2 應(yīng)用程序需要在運行時從某個特定的程序集中載

23、入一個特定的類型,以便實現(xiàn)某個任務(wù)時可以用到反射。3 反射主要應(yīng)用與類庫,這些類庫需要知道一個類型的定義,以便提供更多的功能。 2.5 緩存技術(shù)由數(shù)據(jù)庫驅(qū)動的Web應(yīng)用程序,如果需要改善其性能,最好的方法是使用緩存功能。用戶從數(shù)據(jù)庫中檢索數(shù)據(jù),可能是Web應(yīng)用程序中執(zhí)行最慢的操作之一。因為其中涉與多個環(huán)節(jié),例如,Web服務(wù)器、數(shù)據(jù)庫服務(wù)器等。尤其是在用戶比較多,檢索的數(shù)據(jù)量比較大的情況下,會給包括用戶在的各個方面造成不小的困難。如果能夠?qū)?shù)據(jù)庫中的數(shù)據(jù)緩存到存(也可以存儲在其他場所),則無需在請求每個頁面時都訪問數(shù)據(jù)庫。由于從存中返回數(shù)據(jù)的速度始終比新提供的數(shù)據(jù)速度快,因而可以大大提供應(yīng)用程序

24、的性能。ASP.NET 2.0支持以下幾種緩存:頁面輸出緩存頁面輸出緩存是最為簡單的緩存機制,該機制將整個ASP.NET頁面容保存在服務(wù)器存中。當(dāng)用戶請求該頁面時,系統(tǒng)從存中輸出相關(guān)數(shù)據(jù),直到緩存數(shù)據(jù)過期。在這個過程中,緩存容直接發(fā)送給用戶,而不必再次經(jīng)過頁面處理生命周期。通常情況下,頁面輸出緩存對于那些包含不需要經(jīng)常修改容的,但需要大量處理才能編譯完成的頁面特別有用。需要讀者注意的是,頁面輸出緩存是將頁面全部容都保存在存中,并用于完成客戶端請求。頁面部分緩存顧名思義,頁面部分緩存是將頁面部分容保存在存中以便響應(yīng)用戶請求,而頁面其他部分容則為動態(tài)容。頁面部分緩存的實現(xiàn)包括兩種方式:控件緩存和替

25、換后緩存。前者也可稱為片段緩存,這種方式允許將需要緩存的信息包含在一個用戶控件,然后,將該用戶控件標(biāo)記為可緩存的,以此來緩存頁面輸出的部分容。這一方式緩存了頁面中的特定容,而沒有緩存整個頁面,因此,每次都需重新創(chuàng)建整個頁。例如,如果要創(chuàng)建一個顯示大量動態(tài)容(如股票信息)的頁,其中有些部分為靜態(tài)容(如每周總結(jié)),這時可以將靜態(tài)部分放在用戶控件中,并允許緩存這些容。緩存后替換與控件緩存正好相反。這種方式緩存整個頁,但頁中的各段都是動態(tài)的。例如,如果要創(chuàng)建一個在規(guī)定時間段為靜態(tài)的頁,則可以將整個頁設(shè)置為進行緩存。如果向頁添加一個顯示用戶名的Label控件,則對于每次頁刷新和每個用戶而言,Label的

26、容都將保持不變,始終顯示緩存該頁之前請求該頁的用戶的。使用緩存后替換機制,可以將頁配置為進行緩存,將頁的個別部分標(biāo)記為不可緩存。在此情況下,可以向不可緩存部分添加Label控件,這樣將為每個用戶和每次頁請求動態(tài)創(chuàng)建這些控件。應(yīng)用程序數(shù)據(jù)緩存應(yīng)用程序數(shù)據(jù)緩存提供了一種編程方式,可通過鍵/值對將任意數(shù)據(jù)存儲在存中。使用應(yīng)用程序緩存與使用應(yīng)用程序狀態(tài)類似。但是,與應(yīng)用程序狀態(tài)不同的是,應(yīng)用程序數(shù)據(jù)緩存中的數(shù)據(jù)是易失的,即數(shù)據(jù)并不是在整個應(yīng)用程序生命周期中都存儲在存中。應(yīng)用程序數(shù)據(jù)緩存的優(yōu)點是由ASP.NET管理緩存,它會在項過期、無效,或存不足時移除緩存中的項,還可以配置應(yīng)用程序緩存,以便在移除項時

27、通知應(yīng)用程序。緩存依賴ASP.NET 2.0新增了SQL數(shù)據(jù)緩存依賴功能。該功能的核心是SqlCacheDependency類。不同版本的SQL Server,其對于SQL數(shù)據(jù)緩存依賴具有不同程度的支持,因此,使用方法差異較大。另外,ASP.NET 2.0還支持以CacheDependency類為核心的自定義緩存依賴,以與以AggregateCacheDependency類為核心的聚合緩存依賴等。ASP.NET 2.0包括了一些有助于進行緩存配置的新功能。例如,允許使用Web.config文件來創(chuàng)建緩存設(shè)置。在Web.config文件中進行適當(dāng)設(shè)置,并在單個頁中引用這些設(shè)置后,就能夠?qū)⒕彺嬖O(shè)置

28、同時應(yīng)用于多個頁面。同時,緩存設(shè)置還添加了更多用于自定義緩存性能的選項。2.6 XML技術(shù)XML是Extensible Markup Language的縮寫,是一種類似于HTML的標(biāo)記語言。XML是用來描述數(shù)據(jù)的,它的標(biāo)記不是在XML中預(yù)定義的,你必須定義自己的標(biāo)記 。XML使用文檔類型定義(DTD)或者模式(Schema)來描述數(shù)據(jù)。XML和HTML的主要區(qū)別是:XML是用來存放數(shù)據(jù)的。XML是被設(shè)計用來描述數(shù)據(jù)的,重點是:什么是數(shù)據(jù),如何存放數(shù)據(jù)。HTML是被設(shè)計用來顯示數(shù)據(jù)的,重點是:顯示數(shù)據(jù)以與如何顯示數(shù)據(jù)更好上面。HTML是與顯示信息相關(guān)的, XML則是與描述信息相關(guān)的。.Net框架

29、為我們提供了以下一些命名空間:System.Xml、System.Xml.Schema、 System.Xml.Serialization、System.Xml.Xpath以與 System.Xml.Xsl來包容和XML操作相關(guān)的類。XmlReader類是一個虛基類,它包含了讀XML文檔的方法和屬性。該類中的Read方法是一個基本的讀XML文檔的方法,它以流形式讀取XML文檔中的節(jié)點(Node)。另外,該類還提供了ReadString、ReadInnerXml、 ReadOuterXml和ReadStartElement等更高級的讀方法。除了提供讀XML文檔的方法外,XmlReader類還為程

30、序員提供了 MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、 MoveToElement以與 MoveToNextAttribute等具有導(dǎo)航功能的方法。XmlWriter類為程序員提供了許多寫XML文檔的方法。XmlNode類是一個非常重要的類,它代表了XML文檔中的某個節(jié)點。該節(jié)點可以是XML文檔的根節(jié)點,這樣它就代表整個XML文檔了。它是許多很有用的類的基類,這些類包括插入節(jié)點的類、刪除節(jié)點的類、替換節(jié)點的類以與在XML文檔中完成導(dǎo)航功能的類。同時,XmlNode類還為程序員提供了獲取雙親節(jié)點、子

31、節(jié)點、最后一個子節(jié)點、節(jié)點名稱以與節(jié)點類型等的屬性。XmlDocument類代表了一個XML文檔,它提供了載入和保存XML文檔的方法和屬性。這些方法包括了Load、LoadXml和Save等。同時,它還提供了添加特性(Attributes)、說明(Comments)、空間(Spaces)、元素(Elements)和新節(jié)點(New Nodes)等XML項的功能。2.7 語法高亮顯示語法高亮控件ICSharpCode.TextEdition來自開源項目SharpDevelop。所謂的語法加亮編輯器就是能根據(jù)不同的文件類型,來顯示文本容。比如利用語法加亮編輯器可以顯示C#代碼的效果,類型、變量等分別

32、用不同的顏色以示區(qū)分。具體用法可以參見:第三章 系統(tǒng)分析與設(shè)計3.1 系統(tǒng)分析3.1.1系統(tǒng)開發(fā)環(huán)境A 硬件環(huán)境普通PC ( 1.8GHZ, 存512M)一臺。B 開發(fā)工具系統(tǒng)開發(fā)平臺:Microsoft Windows XP professional 開發(fā)工具與環(huán)境:Microsoft Visual Studio 2005 C#本系統(tǒng)在Microsoft Windows XP professional下開發(fā),程序測試環(huán)境為Microsoft Windows XP professional,用戶在windows 2000和 windows XP下都可以使用。本系統(tǒng)應(yīng)用的軟件開發(fā)工具與環(huán)境:.M

33、icrosoft Visual Studio 2005 C#,配合數(shù)據(jù)庫:Microsoft SQL Server 2000或者Microsoft SQL Server 2005。3.1.2 需求分析該系統(tǒng)主要需求分為數(shù)據(jù)庫連接模塊、代碼生成模塊和數(shù)據(jù)庫查詢分析模塊(圖3-1)。圖3-1 總的功能模塊數(shù)據(jù)庫連接模塊(圖3-2)的業(yè)務(wù)流程:數(shù)據(jù)庫連接模塊支持不同版本的數(shù)據(jù)庫服務(wù)器(至少支持sqlserver2000、sqlserver2005)。當(dāng)用戶需要連接一個新的數(shù)據(jù)庫時,調(diào)用此模塊。用戶提供數(shù)據(jù)庫的連接信息,系統(tǒng)將連接數(shù)據(jù)庫,并做出相應(yīng)的操作提取該數(shù)據(jù)庫的有用信息。圖3-2 數(shù)據(jù)庫連接模塊

34、功能模塊圖數(shù)據(jù)庫查詢分析模塊(圖3-3)的業(yè)務(wù)流程:用戶可以選擇表來查看相應(yīng)表中的數(shù)據(jù)。系統(tǒng)為用戶提供關(guān)于單表的sql語句(包括增、刪、查、改)的模板。用戶方便的進行查詢分析,這樣省去了該系統(tǒng)與數(shù)據(jù)庫之間來回切換的不便。圖3-3 數(shù)據(jù)庫查詢分析模塊功能模塊圖代碼生成模塊(圖3-4)的業(yè)務(wù)流程:根據(jù)用戶選擇的數(shù)據(jù)庫表,系統(tǒng)生成相應(yīng)的代碼。(1)包括生成屬性、添加、修改、刪除、查詢、存在性、Model 類構(gòu)造等基礎(chǔ)代碼片斷。(2)自動生成數(shù)據(jù)庫的存儲過程。(3) 支持不同架構(gòu)代碼生成,用戶可以定義命名。(4)自動生成實體Model,DAL(數(shù)據(jù)訪問層),IDAL(接口層),DALFactory(類

35、工廠),BLL(業(yè)務(wù)邏輯層)等多層的代碼。(5)代碼批量生成自動導(dǎo)出功能。圖3-4 代碼生成模塊的功能模塊圖3.1.3 系統(tǒng)用例圖與詳細(xì)說明本系統(tǒng)用例圖(圖3-5):圖-5系統(tǒng)用例圖每個用例的詳細(xì)說明:用例1:新建連接1、 用戶選擇數(shù)據(jù)庫類型,并且輸入相應(yīng)的服務(wù)器名、用戶名和密碼。2、 系統(tǒng)連接數(shù)據(jù)庫,并獲得該數(shù)據(jù)庫的數(shù)據(jù)信息。錯誤情況1:數(shù)據(jù)庫連接失敗如果用戶輸入的數(shù)據(jù)庫信息有誤,彈出消息框提示操作失敗。用例2:注銷連接1、系統(tǒng)刪除本次連接的數(shù)據(jù)庫數(shù)據(jù)的信息。用例3:刷新連接1、 系統(tǒng)根據(jù)本次數(shù)據(jù)庫連接信息重新連接數(shù)據(jù)庫并且重新得到數(shù)據(jù)庫信息。用例4:瀏覽表數(shù)據(jù)1、 用戶選擇數(shù)據(jù)庫的表,選擇

36、瀏覽表數(shù)據(jù)的選項。2、 系統(tǒng)從數(shù)據(jù)庫中讀取改表中的信息并予以顯示。錯誤情況1:得到數(shù)據(jù)失敗如果系統(tǒng)獲取數(shù)據(jù)失敗,系統(tǒng)拋出異常。用例5:生成sql語句1、 用戶選擇表,并選擇生成sql語句的選項。2、 系統(tǒng)根據(jù)表信息生成相應(yīng)的sql語句,并顯示。用例6:執(zhí)行sql語句1、 用戶輸入執(zhí)行的sql語句,點擊執(zhí)行按鈕。2、 系統(tǒng)執(zhí)行sql語句,得到結(jié)果并顯示。錯誤情況:執(zhí)行sql語句出錯如果系統(tǒng)執(zhí)行sql語句出錯,系統(tǒng)拋出異常。用例7:工廠模式MODEL代碼1、 用戶設(shè)選擇生成工廠模式MODEL代碼的表。2、 用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇工廠模

37、式下的MODEL代碼)、方法選擇、數(shù)據(jù)層類型)。3、 用戶點擊生成按鈕。4、 系統(tǒng)生成工廠模式MODEL代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例8:工廠模式IDAL代碼1、用戶設(shè)選擇生成工廠模式IDAL代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇工廠模式下的IDAL代碼)、方法選擇、數(shù)據(jù)層類型)。5、 用戶點擊生成按鈕。6、 系統(tǒng)生成工廠模式IDAL代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例9:工廠模式

38、DAL代碼1、用戶設(shè)選擇生成工廠模式DAL代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇工廠模式下的DAL代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點擊生成按鈕。4、系統(tǒng)生成工廠模式DAL代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例10:工廠模式IDALFactroy代碼1、用戶設(shè)選擇生成工廠模式IDALFactroy代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇工廠模式下的IDALFactroy代碼)、方法選擇、數(shù)據(jù)層類型

39、)。3、用戶點擊生成按鈕。4、系統(tǒng)生成工廠模式IDALFactroy代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例11:工廠模式BLL代碼1、用戶設(shè)選擇生成工廠模式BLL代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇工廠模式下的BLL代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點擊生成按鈕。4、系統(tǒng)生成工廠模式BLL代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例12:簡單三層MODEL代碼1、用戶設(shè)選擇生成簡單三層MO

40、DEL代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇簡單模式下的MODEL代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點擊生成按鈕。4、系統(tǒng)生成簡單模式MODEL代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例13:簡單三層DAL代碼1、用戶設(shè)選擇生成簡單三層DAL代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇簡單模式下的DAL代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點擊生成按鈕。4、系統(tǒng)生成簡單模式DAL代碼。錯誤情況1:代碼生

41、成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例14:簡單三層BLL代碼1、用戶設(shè)選擇生成簡單三層BLL代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、MODEL類名、代碼類型(選擇簡單模式下的BLL代碼)、方法選擇、數(shù)據(jù)層類型)。3、用戶點擊生成按鈕。4、系統(tǒng)生成簡單模式BLL代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例15:單層代碼1、用戶設(shè)選擇生成單層代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(頂級命名空間、項目名、主鍵、代碼類型(選擇單層代碼)、方法選擇、數(shù)據(jù)層類

42、型)。3、用戶點擊生成按鈕。4、系統(tǒng)生成單層代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例16:Aspx代碼1、用戶設(shè)選擇生成Web頁面代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(代碼類型(選擇Aspx代碼)、方法選擇)。3、用戶點擊生成按鈕。4、系統(tǒng)生成Aspx代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例17:Aspx.CS代碼1、用戶設(shè)選擇生成Web頁面代碼的表。2、用戶設(shè)置代碼生成需要的參數(shù)(代碼類型(選擇Aspx.CS)、方法選擇)。3、用戶點擊生成按鈕。4、

43、系統(tǒng)生成Aspx.CS代碼。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例18:存儲過程1、 用戶選擇生成存儲過程的表和所要生成的存儲過程方法,并點擊生成按鈕。2、 系統(tǒng)生成該表的存儲過程。錯誤情況1:代碼生成失敗如果用戶用戶沒有選擇指定的表,系統(tǒng)將不能正常生成代碼,并彈出消息框予以提示。用例19:代碼導(dǎo)出1、 用戶選擇代碼導(dǎo)出按鈕。2、 系統(tǒng)顯示代碼輸出窗口。3、 用戶選擇要輸出代碼的數(shù)據(jù)庫名和表名。4、 用戶選擇架構(gòu)、方法、保存路徑,輸入命名空間、子文件夾,點擊導(dǎo)出。5、 系統(tǒng)根據(jù)用戶輸入生成相應(yīng)的代碼并保存到相應(yīng)的位置,并彈出消息

44、框提示。錯誤情況1:代碼導(dǎo)出失敗如果用戶選擇的數(shù)據(jù)庫與表不一致,系統(tǒng)無法成功生成代碼,系統(tǒng)將彈出消息框提示。3.2 系統(tǒng)設(shè)計方案3.2.1 設(shè)計原則本系統(tǒng)采用面向?qū)ο蠓椒ú⒏鶕?jù)分層設(shè)計原則設(shè)計。系統(tǒng)分為表示層、邏輯層和數(shù)據(jù)訪問層(如圖3-6所示)三層。圖3.-6 典型代碼生成器的模型數(shù)據(jù)訪問層實現(xiàn)系統(tǒng)與數(shù)據(jù)庫之間的通信。它使的表示層、邏輯層不再關(guān)心數(shù)據(jù)庫的具體問題。業(yè)務(wù)邏輯層實現(xiàn)該系統(tǒng)的業(yè)務(wù)邏輯的細(xì)節(jié)。表示層實現(xiàn)用戶接口。3.2.2 系統(tǒng)類 系統(tǒng)類包含在數(shù)據(jù)訪問包 、業(yè)務(wù)邏輯包 和用戶界面包這三個包中。數(shù)據(jù)訪問包設(shè)計(圖3-7):圖3-7 數(shù)據(jù)訪問包每個類說明:AntoSqlHelper類是進

45、行數(shù)據(jù)庫通信的基類,通過此類訪問數(shù)據(jù)庫并得到數(shù)據(jù)集。DBConfig類用于設(shè)置和讀取數(shù)據(jù)庫連接配置的信息。Sqlk2kDBInfo類用于獲得SQLSERVER2005數(shù)據(jù)庫的信息。Sqlk2kDBInfo2類用戶獲得SQLSERVER2000數(shù)據(jù)庫的信息.DBToDBXml類將SQLSERVER2005數(shù)據(jù)庫的信息轉(zhuǎn)化成表的形式以便對其數(shù)據(jù)庫信息的操作。DBToDBXml2將SQLSERVER2000數(shù)據(jù)庫的信息轉(zhuǎn)化成表的形式以便對其數(shù)據(jù)庫信息的操作。DBToDBXml將不同版本的數(shù)據(jù)信息以統(tǒng)一的形式寫入xml中,它作為本系統(tǒng)的操作基礎(chǔ)。業(yè)務(wù)邏輯包設(shè)計(圖3-8):圖3-8 業(yè)務(wù)邏輯包每個類的

46、說明:EntityCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成工廠模式的MODEL層代碼。IDALCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成工廠模式的IDAL層代碼。DALCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成工廠模式的DAL層代碼。DALFactoryCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成工廠模式的DALFactoryCode層代碼。BLLCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成工廠模式的BLL層代碼。AspxCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成增加窗體和顯示窗體的代碼。AspxCsCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成Aspx.CS代碼。Sim

47、pleCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成單層結(jié)構(gòu)的代碼。THBLLCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成簡單三層的BLL代碼。THDALCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成簡單三層的DAL代碼。THEntityCode類將數(shù)據(jù)庫指定表的信息以與用戶要求生成簡單三層的MODEL代碼。ProcedureCode類將數(shù)據(jù)庫指定表的信息生成存儲過程代碼。CreateSql類將數(shù)據(jù)庫指定表的信息生成SQL語句。TBDataView類得到執(zhí)行SQL語句的結(jié)果,并轉(zhuǎn)化成表的形式。用戶界面包設(shè)計(圖3-9):圖3-9 用戶界面包每個類的說明:Main類構(gòu)成系統(tǒng)的主界面,與用戶進行

48、交互。toUI類封裝了數(shù)據(jù)顯示的細(xì)節(jié)。newConnection類對數(shù)據(jù)庫進行配置。OutCodeFileForm類對代碼進行導(dǎo)出。第四章 系統(tǒng)實現(xiàn)4.1 系統(tǒng)界面設(shè)計1、系統(tǒng)主界面(圖4-1):這是這是主要的用戶接口,提供用戶各種操作。左邊樹形控件用戶顯示數(shù)據(jù)庫信息,右邊用于設(shè)置與顯示數(shù)據(jù)結(jié)果。圖4-1 系統(tǒng)主界面2、新建數(shù)據(jù)連接界面(圖4-2):用戶通過此接口完成新的數(shù)據(jù)庫連接。目前數(shù)據(jù)庫類型只支持SQLSERVER2005和SQLSERVER2000。圖4-2 新建數(shù)據(jù)連接界面3、代碼導(dǎo)出界面(圖4-3):可以有選擇的導(dǎo)出庫表相關(guān)的不同類型的代碼。圖4-3 代碼導(dǎo)出界面4.2系統(tǒng)功能實現(xiàn)

49、4.2.1 數(shù)據(jù)庫新連接(即導(dǎo)入數(shù)據(jù)庫信息)功能的實現(xiàn)數(shù)據(jù)庫新連接功能完成獲取數(shù)據(jù)庫信息。單擊工具欄上的新建連接服務(wù)器,系統(tǒng)進入新建數(shù)據(jù)庫連接界面,用戶輸入數(shù)據(jù)庫類型、服務(wù)器名、用戶名和密碼,單擊連接按鈕。系統(tǒng)將得到數(shù)據(jù)庫信息,并且將數(shù)據(jù)庫信息加載到主界面左側(cè)的樹形控件中。4.2.2 代碼生成功能的實現(xiàn)代碼生成是本系統(tǒng)最基本也是最重要的功能。在左邊選擇一表單擊右鍵選擇代碼生成器,系統(tǒng)右邊將顯示代碼生成器的設(shè)置窗口(圖4-4)。生成的代碼類型有數(shù)據(jù)庫腳本、C#代碼和WEB頁面代碼。C#代碼有基于工廠模式三層、簡單三層和單類結(jié)構(gòu)的代碼。用戶通過此窗口設(shè)置想要得到的代碼類型。然后單擊生成代碼按鈕,系

50、統(tǒng)將生成相應(yīng)的代碼(圖4-5)。圖4-4 設(shè)置窗口圖4-5 生成代碼4.2.3 代碼導(dǎo)出功能的實現(xiàn)系統(tǒng)可以將代碼批量的導(dǎo)出以文件的形式存儲到計算機中。用戶單擊工具欄上的代碼導(dǎo)出按鈕。系統(tǒng)進入代碼導(dǎo)出界面(4-3)。用戶選擇指定的數(shù)據(jù)庫名,系統(tǒng)將在列表框中列出該數(shù)據(jù)庫中表的集合。用戶將想要生成代碼的表加如到右邊的列表框。然后,用戶選擇不同的架構(gòu)、代碼類型、保存路徑與設(shè)置命名空間。單擊導(dǎo)出按鈕,系統(tǒng)將會把代碼導(dǎo)入到指定位置。4.2.4 數(shù)據(jù)庫查詢分析功能的實現(xiàn)系統(tǒng)可以根據(jù)表信息生成相應(yīng)的增刪查改的sql語句,供用戶使用,并且可以直接執(zhí)行sql語句,返回的結(jié)果會在窗口右下方顯示。選擇表單擊右鍵選擇生

51、成sql語句,選擇sql語句類型并單擊,右邊窗口將得到相應(yīng)的sql語句模板。用戶也可以直接編輯sql語句,單擊工具欄的執(zhí)行按鈕,系統(tǒng)將執(zhí)行sql語句,并將結(jié)果在窗口右下方顯示(圖4-6)。圖4-6 數(shù)據(jù)庫查詢分析器第五章 難點與對策5.1 數(shù)據(jù)庫表信息的讀取想要讀取數(shù)據(jù)庫每個表類型信息(表名、表說明、類型長度、主鍵、標(biāo)識等)并不容易。這需要執(zhí)行復(fù)雜的sql語句。代碼實現(xiàn):/單表列集合 type:標(biāo)識 視圖/表 (V/U)public DataSet GetColumns(string dataBaseName, string tableName, string type) /SQl語句stri

52、ng sqlStr = " SELECT " +"CASE WHEN a.colorder = 1 THEN d .name ELSE '' END AS 表名, " +"CASE WHEN a.colorder = 1 THEN isnull(CONVERT(nvarchar, f.value), '') ELSE '' END AS 表說明," +"a.colorder AS 字段序號, " +" AS 字段名, " +"

53、CASE WHEN COLUMNPROPERTY(a.id, , 'IsIdentity') = 1 THEN '' ELSE '' END AS 標(biāo)識, " +"CASE WHEN EXISTS " +" (SELECT 1 " +" FROM sysobjects " +" WHERE parent_obj = object_id(d .name) AND xtype = 'PK' AND name IN" +" (

54、SELECT name " +" FROM sysindexes " +" WHERE indid IN " +" (SELECT indid " +" FROM sysindexkeys " +" WHERE id = a.id AND colid = a.colid) " +"THEN '' ELSE '' END AS 主鍵," +" AS 類型, " +"a.length AS 占用

55、字節(jié)數(shù), " +"COLUMNPROPERTY(a.id, , 'PRECISION') AS 長度, " +"ISNULL(COLUMNPROPERTY(a.id, , 'Scale'), 0) AS 小數(shù)位數(shù), " +"CASE WHEN a.isnullable = 1 THEN '' ELSE '' END AS 允許空, " +"ISNULL(e.text, '') AS 默認(rèn)值, " +&q

56、uot;ISNULL(CONVERT(nvarchar, g.value), '') AS 字段說明 " +"FROM sys.syscolumns AS a LEFT OUTER JOIN " +" sys.systypes AS b ON a.xusertype = b.xusertype INNER JOIN " +" sys.sysobjects AS d ON a.id = d.id AND (d.xtype = '" + type + "' ) AND <> 'dtproperties' LEFT OUTER JOIN " +" sys.syscomments AS e ON a.cdefault = e.id LEFT OUTER JOIN " +" sys.extended_properties AS g ON a.id = g.minor_id

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論