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