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