11.1開(kāi)發(fā)給SQLServer2005用的Assembly

字號(hào):

SQL Server 2005 在核心引擎中加入了 .NET 的公共語(yǔ)言執(zhí)行環(huán)境CLR (Common Language Runtime)。一直以來(lái) SQL Server 核心引擎只有兩大引擎:關(guān)系引擎(Relational Engine)和存儲(chǔ)引擎(Storage Engine),現(xiàn)在變成三個(gè),其改變不可謂不大。本章將介紹 SQL Server 2005 引入 .NET 引擎后的開(kāi)發(fā)方式與用途。
    由于 .NET Framework 自身非常巨大,而且又不是本書(shū)的探討主題,若你有興趣深入研究 .NET Framework 可以參照 .NET Magazine 網(wǎng)站(http://www.netmag.com.tw/)。
    11.1 開(kāi)發(fā)給SQL Server 2005用的Assembly
    SQL Server 2005 讓存儲(chǔ)過(guò)程、觸發(fā)器、用戶自定義函數(shù)、用戶自定義類型以及用戶自定義聚合函數(shù)(Aggregate)等五種 SQL Server 對(duì)象皆可以通過(guò) .NET 的程序集(assembly)來(lái)定義。以往必須要通過(guò) C/C++ 才能辦到的擴(kuò)展存儲(chǔ)過(guò)程(Extended Stored Procedures)而今你只要通過(guò)自己所熟悉的 .NET 語(yǔ)言,如 C# 或 VB.NET 來(lái)完成即可(但要放入 SQL Server 2005 的只能是 dll 函數(shù)庫(kù)類型,不可以是 exe 執(zhí)行文件)。而 .NET 自身強(qiáng)大的功能皆可以融入到 SQL Server 2005 中。
    將.NET開(kāi)發(fā)的程序集成到SQL Server中有以下的好處:
    l 更強(qiáng)的程序設(shè)計(jì)邏輯:.NET Framework 中包羅萬(wàn)象的各種類型功能,你大都能夠引用,但不是全部的類型都被允許調(diào)用使用,你可以在 Visual Studio 2005 打開(kāi)數(shù)據(jù)庫(kù)項(xiàng)目后,通過(guò)“添加引用”查看能使用的類。
    l 更安全:由于 .NET 對(duì)于程序編寫(xiě)與執(zhí)行環(huán)境的安全下了很大的功夫,不管是執(zhí)行時(shí)潛在的類型安全檢查(type safety check)還是管理員所設(shè)置的程序代碼訪問(wèn)安全(Code Access Security)與角色基礎(chǔ)安全(Role Base Security)等等諸多機(jī)制,都加強(qiáng)了程序執(zhí)行環(huán)境的安全。SQL Server 使用根植于 CLR 的組件執(zhí)行起來(lái)也就更安全與穩(wěn)定。
    l 統(tǒng)一的開(kāi)發(fā)與調(diào)試環(huán)境:Visual Studio 2005 開(kāi)發(fā)環(huán)境提供編寫(xiě) SQL Server 2005 對(duì)象的模板,同時(shí)支持部署到 SQL Server 2005 的功能,由于 Visual Studio 2005 自身的便利性,將可以提升開(kāi)發(fā) SQL Server 2005 對(duì)象的品質(zhì)與性能。
    l 性能和擴(kuò)充性:通過(guò) .NET 所開(kāi)發(fā)出來(lái)的程序集(Assembly)是已經(jīng)編譯過(guò)的程序,若是以 T-SQL 編寫(xiě)商業(yè)應(yīng)用,則是以解釋的方式執(zhí)行。所以較為復(fù)雜的商業(yè)應(yīng)用當(dāng)然用 .NET 的語(yǔ)言編寫(xiě)更好。
    l 多語(yǔ)言選擇:由于 .NET 將程序語(yǔ)言與功能分開(kāi),因此挑選語(yǔ)言并沒(méi)有很大的意義,不管是 Visual Basic、C#等語(yǔ)言,還是其他的語(yǔ)言,只要你熟悉該種語(yǔ)法,即可開(kāi)發(fā) SQL Server 可用的對(duì)象,而不像以往一定要使用 C/C++ 才行。
    雖然用 .NET 程序語(yǔ)言開(kāi)發(fā) SQL Server 的對(duì)象有很多好處,但它仍無(wú)法取代 SQL 語(yǔ)言,以及純用 T-SQL 編寫(xiě)的的 SQL Server 對(duì)象。復(fù)雜的商業(yè)邏輯,需要面向?qū)ο蠓治鲈O(shè)計(jì),結(jié)構(gòu)化處理,訪問(wèn)文件、網(wǎng)絡(luò)等周邊設(shè)備,對(duì)數(shù)據(jù)加解密等諸多程序功能,自然用 .NET 語(yǔ)言更好。
    但若純粹訪問(wèn)數(shù)據(jù),都是集合(set)方便進(jìn)行添加、修改、刪除和查詢數(shù)據(jù)的工作,此種仍用 T-SQL 較為適合,這樣才能發(fā)揮關(guān)系引擎化執(zhí)行 SQL 語(yǔ)法的功能。若將所有的商業(yè)邏輯都搬進(jìn)到 SQL Server 勢(shì)必大幅增加服務(wù)器的負(fù)擔(dān),因此仍要慎選程序邏輯的執(zhí)行位置。
    首先通過(guò)一般的集成開(kāi)發(fā)環(huán)境(例如 Visual Studio 2005)新建所需的程序集,當(dāng)編寫(xiě)并編譯完當(dāng)作函數(shù)庫(kù)(.dll 格式)的程序集后,你可以通過(guò) T-SQL 語(yǔ)法或是 Visual Studio 2005 直接將其部署到 SQL Server 2005 中,SQL Server 會(huì)把該程序集存放在數(shù)據(jù)庫(kù)內(nèi),而與外部文件系統(tǒng)上的程序集不再有關(guān)系。也就是說(shuō)若你有新的改版,需要先將 SQL Server 內(nèi)的程序集刪除,重新部署才可以。
    當(dāng)程序集部署到 SQL Server 后,通過(guò) Create Function、Create Procedure等T-SQL 語(yǔ)法可以設(shè)置存儲(chǔ)過(guò)程、用戶自定義函數(shù)、觸發(fā)器、用戶自定義數(shù)據(jù)類型以及聚合函數(shù)等五種對(duì)象是來(lái)自該程序集,然后就當(dāng)作一般的對(duì)象搭配 T-SQL 來(lái)使用。
    大致了解系統(tǒng)架構(gòu)后,接著,我們就通過(guò) Visual Studio 2005 來(lái)開(kāi)發(fā) SQL Server 2005 內(nèi)的各種對(duì)象,通過(guò) SQL Server 2005 Management Studio 來(lái)管理設(shè)置這些對(duì)象。讓你先熟悉一下這些全新的環(huán)境后,我們?cè)龠M(jìn)一步討論程序編寫(xiě)的技術(shù)細(xì)節(jié)。