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