實作CLR存儲過程十四步
存儲過程是SQLServer2005程序設(shè)計中最重要的一環(huán),您會發(fā)現(xiàn),應(yīng)用系統(tǒng)中的許多作業(yè)都會交由存儲過程來完成。在以下的操作步驟中,我們帶大家利用VisualStudio2005整合式開發(fā)環(huán)境,實際建立一個CLR存儲過程(采用VisualC#),并示范如何使用它:
1.如圖表1所示,選取MicrosoftVisualStudio2005菜單指令來開啟VisualStudio2005的整合式開發(fā)環(huán)境。
2.從「項目」菜單中選取「新增/項目」指令。
3.如圖表2所示,選取「類別庫」模板,然后依序指定項目名稱(SayHello)、存放位置、以及方案名稱(SayHello)之后,按一下「確定」按鈕。
4.于VisualStudio2005整合式開發(fā)環(huán)境的「方案總管」中,使用鼠標(biāo)右鍵按一下預(yù)設(shè)建立的Class1.cs并從快捷菜單中選取「刪除」指令以便將它刪除。
5.從「項目」菜單中選取「加入新項目」指令。
6.如圖表3所示,于「加入新項目」對話框中,選取「類別」模板,然后以SayHelloClass.cs作為類別檔的文件名稱,然后按一下「加入」按鈕。
7.于程序代碼編輯器中,將SayHelloClass類別的程序代碼改寫如下:
- usingMicrosoft.SqlServer.Server;
- namespaceSayHello
- {
- publicclassSayHelloClass
- {
- [Microsoft.SqlServer.Server.SqlProcedure()]
- publicstaticvoidSayHello(refstringgreeting)
- {
- SqlMetaDatacolumnInfo=newSqlMetaData("問候",SqlDbType.NVarChar,12);
- SqlDataRecordgreetingRecord=newSqlDataRecord(newSqlMetaData[]{columnInfo});
- greetingRecord.SetString(0,"大家好,我是章立民!");
- //呼叫Pipe對象的Send方法將單一數(shù)據(jù)列結(jié)果集(也就是SqlDataRecord對象)
- //直接傳送給客戶端。
- SqlContext.Pipe.Send(greetingRecord);
- //將文字符串指派給輸出參數(shù)。
- greeting="現(xiàn)在時間是"+DateTime.Now.ToString()+"---章立民研究室向您問好!";
- }
- }
- }
上述程序代碼中的SayHello程序是一個公用靜態(tài)方法,而它也就是CLR存儲過程所實際呼叫的對象。
8.按一下工具列中的「儲存」按鈕。
9.如圖表4所示,使用鼠標(biāo)連按兩下「方案總管」中的Properties節(jié)點,一開始會顯示出「應(yīng)用程序」索引卷標(biāo)頁面,您可以去設(shè)定組件名稱與跟命名空間。不過以本實作演練而言,請采用默認(rèn)值,不要更改。
10.按一下左側(cè)的「編譯」索引卷標(biāo)來切換至其頁面,并且將「建置輸出路徑」設(shè)定成bin然后按一下工具列中的「儲存」按鈕。
11.從「建置」菜單中選取「建置SayHello」指令。
12.好的,我們現(xiàn)在已經(jīng)完成組件的建置作業(yè),現(xiàn)在必須回到SQLServerManagementStudio中,以便登錄組件并建立指向該組件的存儲過程。
13.請您于SQLServerManagementStudio中執(zhí)行以下的程序代碼,以便使用CREATEASSEMBLY陳述式來登錄組件SayHello.dll,然后使用CREATEPROCEDURE陳述式建立一個會參考所登錄之組件SayHello.dll的存儲過程:
- USE北風(fēng)貿(mào)易;
- GO
- IFEXISTS(SELECT*FROMsys.proceduresWHERE[name]='SayHello')
- DROPPROCEDURESayHello;
- GO
- IFEXISTS(SELECT*FROMsys.assembliesWHERE[name]='SayHello')
- DROPASSEMBLYSayHello;
- GO
- --登錄組件SayHello.dll(請務(wù)必確認(rèn)組件所在路徑正確)
- CREATEASSEMBLYSayHello
- FROM'C:\SQL2005Demo\CH13\SayHello\SayHello\bin\SayHello.dll'
- WITHpermission_set=Safe;|
- GO﹂──>組件的位置路徑
- --建立一個會參考所登錄之組件SayHello.dll的存儲過程
- CREATEPROCEDUREdbo.SayHello
- (
- @Greetingnvarchar(80)OUTPUT
- )
- ASEXTERNALNAMESayHello.[SayHello.SayHelloClass].SayHello;
- GO↓
- [命名空間.類別名稱]
14.請您繼續(xù)于SQLServerManagementStudio中執(zhí)行以下的程序代碼,以便嘗試執(zhí)行我們所建立的CLR存儲過程(執(zhí)行結(jié)果如圖表6所示):
- USE北風(fēng)貿(mào)易;
- GO
- EXECsp_configure'clrenabled','1';
- GO
- RECONFIGURE;
- GO
- DECLARE@return_valueint,@Greetingnvarchar(80);
- --執(zhí)行CLR存儲過程并取得傳回值與輸出變量的值
- EXECUTE@return_value=dbo.SayHello
- @Greeting=@GreetingOUTPUT;
- --檢視傳回值與輸出變數(shù)的值
- SELECT@return_valueAS傳回值,
- @GreetingAS"輸出參數(shù)@Greeting之值";
【編輯推薦】