1. 程式人生 > 實用技巧 >用C#寫儲存過程(VS.NET 2005)

用C#寫儲存過程(VS.NET 2005)

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

SQL2005中內建CLR, 因此可以用更高階的託管語言編寫SP, Trigger,Function....等
下面是我用C#編寫SP的過程:

環境: Win 2003 + SQL Server 2005 CTP(今年2月版本) +VS.NET 2005 CTP(今年2月版本) +FW 2.0.50110 beta208013001_FyLx.jpg

首先接上一篇連結的資料庫,新建一個SQL Server Project
08013001_2cp8.jpg

接下來會提示要連結的資料庫對話方塊:
08013002_hk4k.jpg
如果要連結的資料庫不在列表中,可以Add New,連結完資料庫後將得到如下工程

08013002_CIaI.jpg
新增一個StoredProcedure Item,目前支援的Item有:

08013002_voVq.jpg

此時可以在資料庫中新增一個表,如: table1,欄位如下:
08013002_Wuoa.jpg

給剛才新增的 StoredProcedure Item 中新增如下程式碼,其中包括兩個儲存過程,和一個函式

08013002_YLQH.gifusingSystem;
08013002_YLQH.gifusingSystem.Data;
08013002_YLQH.gifusingSystem.Data.Sql;
08013002_YLQH.gifusingSystem.Data.SqlServer;
08013002_YLQH.gifusingSystem.Data.SqlTypes;
08013002_YLQH.gif
08013002_YLQH.gif
08013002_YLQH.gifpublicpartial classStoredProcedures
08013002_nVZK.gif{
08013002_XvcM.gif[SqlProcedure]
08013002_XvcM.gifpublicstaticvoidHello()
08013002_WDug.gif{
08013002_XvcM.gifSqlContext.GetPipe().Send("hello,uGoer!");
08013002_PfX7.gif}

08013002_XvcM.gif
08013002_XvcM.gif[SqlProcedure]
08013002_XvcM.gifpublicstaticvoidInsertData(SqlStringname)
08013002_WDug.gif{
08013002_XvcM.gifSqlCommandInsertCurrencyCommand=SqlContext.GetCommand();
08013002_XvcM.gifInsertCurrencyCommand.CommandText="INSERTINTOtable1(Name,addDate)VALUES('"+name.Value+"','"+DateTime.Now.ToString()+"')";
08013002_XvcM.gifInsertCurrencyCommand.ExecuteNonQuery();
08013002_PfX7.gif}

08013002_XvcM.gif
08013002_XvcM.gif[SqlFunction]
08013002_XvcM.gifpublicstaticSqlStringtestFunction()
08013002_WDug.gif{
08013002_XvcM.gifreturn"hello,cnBlogs.com";
08013002_PfX7.gif}

08013002_nObk.gif}
;
下一步就是編譯部署用C#寫的儲存過程與函式,在目前的這個版本中VS.NET可以比較順利的完成,步驟如下:
選擇build-->Deploy 工程名稱
部署完成以後再看看資料庫吧,呵呵,剛才寫的SP, Function都到裡面去了
08013002_RNIT.jpg

最後測試一下呼叫C#寫的儲存過程,在SQL Server Project建立後會自動建立Test Scripts資料夾並且包含Test.sql檔案,工具MSDN的說法可以在裡面直接寫T-SQL進行測試,好,下面我們就看看,在Test.sql中新增如下資料:
08013002_YLQH.gifEXECHello
08013002_YLQH.gifEXECInsertData ' ugoer '
08013002_YLQH.gifEXECInsertData ' cnBlogs '
08013002_YLQH.gif
08013002_YLQH.gif-- 看看我們新增的資料
08013002_YLQH.gif
SELECT * FROMtable1

然後在Debug下 開始 Start 嘿嘿,等等吧,VS 2005太吃記憶體了,建議512M的機子跑。
看看我們得到了什麼:
08013002_YHFE.jpg
哈哈,一切正常看來以後寫 儲存過程方便了,運用託管語言封裝T-SQL,可以利用託管語言對資料的處理能力,比如資料庫過濾,判斷,迴圈,等等等


另:如果Debug出現這樣的提示:use sp_configure 'clr enabled',請先開啟 clr enabled,方法如下:

08013002_YLQH.gifEXECsp_configure ' showadvancedoptions ', 1
08013002_YLQH.gifGO
08013002_YLQH.gifRECONFIGURE
08013002_YLQH.gifGO
08013002_YLQH.gif
EXECsp_configure ' clrenabled ', 1
08013002_YLQH.gifGO
08013002_YLQH.gifRECONFIGURE
08013002_YLQH.gifGO
08013002_YLQH.gif
08013002_YLQH.gif

要關閉clr enabled,可以使用

08013002_YLQH.gifEXECsp_configure ' clrenabled ', 0
08013002_YLQH.gifGO
08013002_YLQH.gifRECONFIGURE
08013002_YLQH.gifGO
08013002_YLQH.gif

轉載於:https://my.oschina.net/bv10000/blog/143057